Использование grep --exclude-dir в OSX

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приводит к печати каждой записи (, измененной или не измененной ).

0
19.04.2020, 21:10
1 ответ

Я делал то же самое...

Когда мой терминал 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

Ян Джеймс

0
19.03.2021, 02:27

Теги

Похожие вопросы