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

У меня проблема, с которой мне нужна помощь. Я не очень разбираюсь в 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 
  • Передайте некоторые указания о логике ветвления в сценарий
  • Учитывая две фоновые команды, завершите оставшуюся, когда либо выйдет
  • Следует ли указывать переменные при выполнении?
  • Аргументы сценария Bash не передаются функции?
  • Bash работает с несколькими программами и закрывается
  • изменение идентификатора владельца UID для 10 пользователей в каталоге 10 + TB
  • Состояние выхода Bash, используемое с PIPE
  • как создать скрипт для резервного копирования баз данных MySQL на отдельные файлы?
  • Как запустить скрипт как ограниченный пользователь?
  • Получить последнее значение переменной среды - это сценарий оболочки bash
  • Сценарий SSH и команда запуска
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.