Você precisa definir o separador de campo ( FS
) corretamente. Por padrão, awk
usa qualquer espaço em branco horizontal como o separador de campo, portanto, no seu caso, SAMS
se torna um campo e CLUB
se torna outro. Portanto, {gsub("SAMS CLUB","SAM\'S CLUB",$3);print}
não está funcionando como esperado.
Você pode fazer:
awk -F ', +' '{gsub("SAMS CLUB","SAM'\''S CLUB",$3); print}' OFS=", " file.txt
-
-F ', +'
defineFS
como vírgula, seguido por um ou mais espaços. Se você não tiver certeza sobre os espaços, use a classe de caractere[:blank:]
para representar qualquer espaço em branco horizontal e altereOFS
para atender sua necessidade também.
Exemplo:
% 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