次の形式の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