awk -F '|' -v OFS='|' '$16 == "Market1" { $16 = "MarketPrime" }1' file.csv >new-file.csv
Единственная реальная проблема в вашем коде заключается в том, что вы установили разделитель входного файла не только |
, но и пробелы. Это приведет к тому, что пробелы будут считаться разделителями полей в данных, и будет невероятно сложно определить правильный номер поля (, поскольку некоторые поля содержат переменное количество пробелов ).
Вы также не можете перенаправить в файл с тем же именем, которое вы используете для чтения. Это заставит оболочку сначала обрезать (пустой )выходной файл, и ваша awk
программа не будет иметь данных для чтения.
Ваш код выполняет замену регулярного выражения. Это нормально, но вы должны знать, что если 16-е поле окажется чем-то вроде Market12
или TheMarket1
, это вызовет замену из-за отсутствия точек привязки. Было бы безопаснее использовать ^Market1$
в качестве выражения для замены или использовать сравнение строк.
Приведенная выше команда awk
использует только |
в качестве разделителя полей, а затем выполняет сравнение строки с 16-м полем. Если это поле Market1
, оно устанавливается на MarketPrime
.
Конечный 1
в конце кода awk
приводит к печати каждой записи (, измененной или не измененной ).
Я делал то же самое...
Когда мой терминал bash в OSX Big Sur запустился, он выдал это сообщение...
«Интерактивной оболочкой по умолчанию теперь является zsh. Чтобы обновить свою учетную запись для использования zsh, запустите chsh -s /bin/zsh
. Для получения более подробной информации, пожалуйста, посетитеhttps://support.apple.com/kb/HT208050."
Итак, я выполнил поиск в grep в поисках файла, содержащего слова «Интерактивная оболочка по умолчанию». Я не нашел такого файла.
Как оказалось, сообщение «Интерактивная оболочка по умолчанию и т. д.» на самом деле жестко запрограммировано в bash.
hexdump -C /bin/bash дает...
000775c0 6e 2f 7a 73 68 00 0a 54 68 65 20 64 65 66 61 75 |n/zsh..По умолчанию|
000775d0 6c 74 20 69 6e 74 65 72 61 63 74 69 76 65 20 73 |lt интерактивный s|
000775e0 68 65 6c 6c 20 69 73 20 6e 6f 77 20 7a 73 68 2e |ад теперь зш.|
(Примечание :Мой $BASH _ВЕРСИЯ 3.2.57 (1 )-выпуск)
(Примечание. :Существует множество сообщений ASCII, жестко запрограммированных в bash.)
Это предупреждение можно отключить, добавив следующую строку в свой профиль ~/.bash _экспорт BASH _SILENCE _УСТАРЕВАНИЕ _WARNING=1
Ян Джеймс