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 ', +'defineFScomo 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 altereOFSpara 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