Необходимо правильно установить разделитель полей (FS
). По умолчанию awk
использует любой горизонтальный пробел (s )в качестве разделителя полей, поэтому в вашем случае 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
как запятую, за которой следует один или несколько пробелов (s ). Если вы не уверены в пробелах, вместо этого используйте класс символов [: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
У меня была похожая проблема с моим T590 и док-станцией Thinkpad Ultra. Обновление прошивки док-станции и BIOS T590 помогло (см.https://pcsupport.lenovo.com/at/en).
А теперь плохие новости. :Мне пришлось делать это с помощью Windows, так как в настоящее время (Декабрь 2019 )Lenovo не предлагает способ обновления с использованием ОС, отличной от -Windows. Я не рискнул запустить это с помощью вина.