как изменить один столбец и добавить другие столбцы в строке awk

У меня есть файл MDD.TXT со следующими записями. файл: MDD.TXT

0|ABC|055309|20120929053309|11965150 0|ABC|061434|20120929063434|11155537 0|ABC|070228|20120929073228|11965150 0|ABC|082213|20120929583213|11965150 0|ABC|083950|20120929983950|11965150 0|ABC|084112|20120929083112|11965150 

Теперь я хочу заменить второй столбец на «XYZ» и хочу добавить два имени файла столбца и «успех» во всей записи. желаемый результат должен быть следующим:

 0|XYZ|055309|20120929053309|11965150|MDD.TXT|SUCCESS 0|XYZ|061434|20120929063434|11155537|MDD.TXT|SUCCESS 0|XYZ|070228|20120929073228|11965150|MDD.TXT|SUCCESS 0|XYZ|082213|20120929583213|11965150|MDD.TXT|SUCCESS 0|XYZ|083950|20120929983950|11965150|MDD.TXT|SUCCESS 0|XYZ|084112|20120929083112|11965150|MDD.TXT|SUCCESS 

5 Solutions collect form web for “как изменить один столбец и добавить другие столбцы в строке awk”

Вы можете попробовать следующее awk :

 awk 'BEGIN { FS = OFS = "|" } { $2 = "XYZ"; $6 = ARGV[1]; $7 = "SUCCESS";} 1' MDD.TXT 

или:

 awk 'BEGIN { FS = OFS = "|" } { $2 = "XYZ"; print $0 OFS ARGV[1] OFS "SUCCESS"; }' MDD.TXT 

Вы также можете использовать sed

 $ sed -e 's/\bABC\b/XYZ/g' -e 's/$/|MDD.TXT|SUCCESS/g' MDD.TXT 

Чтобы внести изменения в файл напрямую

 $ sed -i -e 's/\bABC\b/XYZ/g' -e 's/$/|MDD.TXT|SUCCESS/g' MDD.TXT 

Чтобы сохранить исходный файл и перенаправить желаемый вывод на другой

 $ sed -e 's/\bABC\b/XYZ/g' -e 's/$/|MDD.TXT|SUCCESS/g' MDD.TXT >> MDD_MODIFFIED.TXT 

С awk :

 awk 'BEGIN{OFS=FS="|"} {$2="XYZ"; $0=$0"|"FILENAME"|SUCCESS"}1' mdd.txt 

Где:

  • BEGIN{} выполняется только в начале, а не для каждой строки.
  • OFS=FS="|" устанавливает разделитель поля ввода и вывода в | ,
  • $2="XYZ" устанавливает второе поле в XYZ
  • $0=... добавляет к целой строке FILENAME (из внутренних переменных awk ) и SUCCESS в виде строки.

Это та же идея, что и существующие awk но немного более кратким:

 awk -F'|' -vOFS="|" '{$2="XYZ"; print $0,"MDD.TXT","SUCCESS"}' MDD.TXT 

Чтобы он автоматически добавлял имя файла (для любого имени файла), используйте:

 awk -F'|' -vOFS="|" '{$2="XYZ"; print $0,ARGV[1],"SUCCESS"}' MDD.TXT 

-F устанавливает разделитель входных записей, а -vOFS устанавливает переменную OFS , разделитель выходной записи. Затем мы устанавливаем второе поле в XYZ и печатаем строку ( $0 ), имя файла ( ARGV[1] ) и SUCCESS .

Обратите внимание, что в вашем примере у вас есть пробелы в каждой строке, поэтому выполнение любого из предлагаемых решений приведет к:

 $ awk -F'|' -vOFS="|" '{$2="XYZ"; print $0,ARGV[1],"SUCCESS"}' MDD.TXT 0|XYZ|055309|20120929053309|11965150 |MDD.TXT|SUCCESS 0|XYZ|061434|20120929063434|11155537 |MDD.TXT|SUCCESS 0|XYZ|070228|20120929073228|11965150 |MDD.TXT|SUCCESS 0|XYZ|082213|20120929583213|11965150 |MDD.TXT|SUCCESS 0|XYZ|083950|20120929983950|11965150 |MDD.TXT|SUCCESS 0|XYZ|084112|20120929083112|11965150|MDD.TXT|SUCCESS 

Чтобы этого избежать, вы можете установить разделитель полей ввода в | или пространство:

 $ awk -F' |' -vOFS="|" '{$2="XYZ"; print $0,ARGV[1],"SUCCESS"}' MDD.TXT 0|ABC|055309|20120929053309|11965150|XYZ

MDD.TXT|SUCCESS 0|ABC|061434|20120929063434|11155537|XYZ||MDD.TXT|SUCCESS 0|ABC|070228|20120929073228|11965150|XYZ||MDD.TXT|SUCCESS 0|ABC|082213|20120929583213|11965150|XYZ||MDD.TXT|SUCCESS 0|ABC|083950|20120929983950|11965150|XYZ||MDD.TXT|SUCCESS 0|ABC|084112|20120929083112|11965150|XYZ|MDD.TXT|SUCCESS

Или вы можете просто удалить конечные пробелы перед разбором файла:

 sed 's/\s*$//' MDD.TXT | awk -F' |' -vOFS="|" '{$2="XYZ"; print $0,"MDD.TXT|SUCCESS"}' 
  • Не может mv в подкаталог себя
  • Удалить символы строки строки из stdout? Несколько строк в одну строку
  • Вызов функции, которая вызывает другую функцию с циклом for
  • Почему не матч SHA?
  • Как извлечь строки из одного файла в несколько файлов
  • Обработка ввода для команды чтения как самой команды
  • Найти весь интерфейс Ethernet и связать IP-адрес
  • Если файл существует в каталоге, то ...?
  • Изменение разрешений файла при использовании команды sftp в сценарии оболочки
  • Резервное копирование большого файла
  • Как перемещать или копировать список файлов, на которые ссылается файл csv, в новую папку
  • Interesting Posts

    Ctrl + клавиши со стрелками, работающие в tmux

    Интеграция настраиваемого модуля ядра в Debian

    Как найти мой пипс?

    Как распечатать все поля, содержащие одну из двух строк в таблице с awk

    Не удается запустить презентацию на сеансе удаленной консоли компьютера из сеанса SSH

    как удалить ctrl F в файле unix

    Количество вкладок в строке в текстовом файле с utils

    «Если переменная не содержит« не работает »

    Как я могу узнать, какие приложения будут «работать» в моей среде рабочего стола (Gnome 3)?

    Что такое хороший способ сохранить резервную копию электронных писем?

    Каковы основные различия между $ ENV_VAR и `env_var`?

    OpenVPN, похоже, не очищает таблицу маршрутов при нарушении туннеля VPN

    Получите музыку от дозвукового, чтобы работать в безголовом MPD

    переименовывать файлы с помощью команды rename

    Почему tar поддерживает 100% процессор, если список файлов имеет ведущие пространства

    Linux и Unix - лучшая ОС в мире.