特定の文字列を見つけて、awkを使用して.CSVファイルの3番目の列の内容を置き換え、それを一重引用符付きの別の文字列に置き換えて、その出力を別のファイルにコピーしたいと思います。私が何を間違っているかについての提案はありますか?
たとえば、
column1, coluumn2, coulumn3, column4, column5
1, item1, WALMART, 2.39, 50
2, item2, TARGET, 4.99, 52
3, item3, SAMS CLUB, 8.19, 15
4, item4, KROGER, 12.49, 33
5, item6, WEGMANS, 32.69, 75
6, item6, TARGET, 12.99, 25
7, item7, SAMS CLUB, 8.19, 92
以下でawkを試しましたが、うまくいきません。
awk '{gsub("SAMS CLUB","SAM\'S CLUB",$3);print}' filename1 > filename2
ベストアンサー1
FS
フィールド区切り記号()を正しく設定する必要があります。デフォルトでは、awk
水平スペースはフィールド区切り文字として使用されるため、あなたの場合はSAMS
1つのフィールドと別のフィールドになりますCLUB
。したがって、{gsub("SAMS CLUB","SAM\'S CLUB",$3);print}
期待どおりに動作しません。
あなたはできます:
awk -F ', +' '{gsub("SAMS CLUB","SAM'\''S CLUB",$3); print}' OFS=", " file.txt
-F ', +'
コンマに設定し、FS
その後に1つ以上のスペースが続きます。空白がわからない場合は、文字クラスを使用して水平スペースを表し、[:blank:]
必要OFS
に応じて変更してください。
例:
% cat file.txt
column1, coluumn2, coulumn3, column4, column5
1, item1, WALMART, 2.39, 50
2, item2, TARGET, 4.99, 52
3, item3, SAMS CLUB, 8.19, 15
4, item4, KROGER, 12.49, 33
5, item6, WEGMANS, 32.69, 75
6, item6, TARGET, 12.99, 25
7, item7, SAMS CLUB, 8.19, 92
% awk -F ',[[:blank:]]+' '{gsub("SAMS CLUB","SAM'\''S CLUB",$3); print}' OFS=", " file.txt
column1, coluumn2, coulumn3, column4, column5
1, item1, WALMART, 2.39, 50
2, item2, TARGET, 4.99, 52
3, item3, SAM'S CLUB, 8.19, 15
4, item4, KROGER, 12.49, 33
5, item6, WEGMANS, 32.69, 75
6, item6, TARGET, 12.99, 25
7, item7, SAM'S CLUB, 8.19, 92