Linux

將 CSV 文件列中的字元串替換為另一個帶單引號的字元串

  • August 30, 2017

我想通過查找特定字元串並替換為另一個具有單引號的字元串並將其輸出複製到另一個文件中來替換 .CSV 文件(使用 awk)的第 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

您需要正確設置欄位分隔符 ( FS)。預設情況下,awk使用任何水平空格作為欄位分隔符,因此在您的情況下SAMS成為一個欄位並CLUB成為另一個欄位。因此,{gsub("SAMS CLUB","SAM\'S CLUB",$3);print}沒有按預期工作。

你可以做:

awk -F ', +' '{gsub("SAMS CLUB","SAM'\''S CLUB",$3); print}' OFS=", " file.txt
  • -F ', +'設置FS為逗號,後跟一個或多個空格。如果您不確定空格,請改用字元類[: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

引用自:https://unix.stackexchange.com/questions/389203