CSVファイルの特定の列からすべての大文字を削除します。

CSVファイルの特定の列からすべての大文字を削除します。

次の形式の3000を超える行を含むCSVファイルがあります。

R1C1, ABC123abc, R1C3
R2C1, DEFG456defg, R2C3
R3C1, HIJKL789hijkl, R3C3

内容が次のように見えるように、ファイルの2番目の列からすべての大文字を削除する必要があります。

R1C1, 123abc, R1C3
R2C1, 456defg, R2C3
R3C1, 789hijkl, R3C3

これはどのように達成できますか?

答え1

あなたはそれを使用することができますawk

$ awk -F',' '{sub(/[[:upper:]]+/,"",$2)}1' OFS=',' file
R1C1, 123abc, R1C3
R2C1, 456defg, R2C3
R3C1, 789hijkl, R3C3

答え2

2番目のフィールドの大文字が散在する場合、

awk -F ',' '{gsub(/[[:upper:]]/, X, $2)}1' OFS=, file

答え3

そしてミラー( mlr):

$ mlr --csv -N put '$2 = gsub($2, "[[:upper:]]", "")' file
R1C1, 123abc, R1C3
R2C1, 456defg, R2C3
R3C1, 789hijkl, R3C3

これは、データをヘッダーなしのCSVファイルに読み込み、すべての大文字を空白に置き換える(つまり削除)、各レコードの2番目のフィールドを変更します。

答え4

Bashは次のコマンドで使用されますsed

#!/bin/bash
cnt=0;
while IFS=, read a b c; 
do 
 echo -n $a ; cnt=$[cnt+1]; 
 sed  -e 's/[^,]*,\([^,]*\).*/\1/' file | 
 sed  -e 's/\([[:upper:]]\)//g'| 
 sed  -e  $cnt'q;d'|
 tr '\n' ' ' ;
 echo  $c; 
done  < file

生産する:

R1C1 123abc R1C3
R2C1 456defg R2C3
R3C1 789hijkl R3C3

関連情報