CSVファイル列の文字列を一重引用符付きの別の文字列に置き換えます。

CSVファイル列の文字列を一重引用符付きの別の文字列に置き換えます。

特定の文字列を見つけて、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水平スペースはフィールド区切り文字として使用されるため、あなたの場合はSAMS1つのフィールドと別のフィールドになります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

おすすめ記事