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