Разбить заголовок в файле и на основе заголовка заменить значение в файле

У меня проблема, с которой мне нужна помощь. Я не очень разбираюсь в awk, но, похоже, это хороший инструмент для этой работы. У меня есть следующий файл

Field1|Field2|Field3|Field4|Field5 a|b|c|d|e 1|2|3|4|5 z|y|x|w|v 

У меня есть сценарий, который принимает два входа

 script.sh Field3 T 

Script.sh будет принимать аргумент «Field3» и на основе этого номера столбца должен заменить содержимое «T». Я огляделся по интернету и перешел на stackexchange и нашел кучу вещей, подобных этому, но не совсем так. Любая помощь будет оценена по достоинству.

[редактировать]

Я попробовал следующее предложение от @Costas и столкнулся с проблемой. Мой файл выглядит так:

 MODULE_ColumnA~MODULE_ColumnB~MODULE_ColumnC~MODULE_ColumnD~MODULE_ColumnE 8.2~Y~N~~0 

Если я запустил следующий скрипт

 cat <filename> | awk -F'~' -vp='MODULE_ColumnD' -vr='99' 'NR==1{for (i=1;i<=NF;i++) if($i==p)f=i;print;next}$f=r' 

Он заменяет значение, но разделитель отсутствует или заменяется пространством на выходе как таковым:

 MODULE_ColumnA~MODULE_ColumnB~MODULE_ColumnC~MODULE_ColumnD~MODULE_ColumnE 8.2 YN 99 0 

Как мне вернуть разделитель в записи?

One Solution collect form web for “Разбить заголовок в файле и на основе заголовка заменить значение в файле”

 awk -F'|' -vp='Field3' -vr='T' ' NR==1{ for (i=1;i<=NF;i++) if ($i==p) f=i print next} $f=r ' 

Если вам нравится форматировать его, чтобы использовать его как script.awk сохраните его как:

 #!/usr/bin/awk -f BEGIN{ OFS=FS="|"} NR==1{ for (i=1;i<=NF;i++) if ($i==p) f=i print next} $f=r 

и выполнить его исполняемый файл с помощью chmod +x script.awk и использовать:

 ./script.awk p=Field4 r=T input.file 
  • Как изменить текст внутри одинарных кавычек?
  • Поиск файла в каталоге по времени
  • Преобразование вывода диска в читаемую HTML-почту
  • извлечение доменных имен (имен хостов) из текстового файла
  • Возможно ли иметь комментарии в многострочных командах в рыбе?
  • Сценарий с использованием пользовательского ввода для расчета старой даты
  • Учитывая две фоновые команды, завершите оставшуюся, когда либо выйдет
  • Как определить интерпретатор команд из сценария оболочки?
  • Скрипт, который распаковывает initrd, позволяет редактировать файл preseed.cfg, а пакеты его снова будут добавлены в cpio и gzip
  • быстро сравнить значения в текстовом файле
  • Почему мое условие всегда ложно?
  • Печать переменной в одиночной кавычки в bash | Странные переменные
  • Interesting Posts

    Grep: поиск и замена полной строки

    Привод mount iscsi при загрузке – остановка системы

    группы журнальных процессов

    Эволюция зависает в течение 10-30 секунд после ответа / написания нового письма

    Что такое цель, сервис и сокет systemd?

    Применяйте флаги расширения параметров к литералу строки или массива в zsh

    Linux: совместное использование нагрузки на новом сервере

    Сценарий с цветами (tput) – это BW при автозапуске при загрузке

    Где можно приобрести полнодиапазонный драйвер WLAN Broadcom DW1530?

    Параметры stty изменяются с точки зрения патологии

    Добавление тегов в файлы (PDF) и процесс из командной строки или скрипта

    Отправлять электронные сообщения за пределами сети, с сервера за маршрутизатором DNS и переадресацией портов

    Arch Linux: pacman не может быть обновлен, потому что версия pacman слишком высока?

    Я могу читать с жесткого диска, но я не могу установить его только для чтения

    Клонирование Linux не загружается

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