Bash
解析文件中的標頭並根據標頭替換文件中的值
我有以下文件
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”。
$$ edit $$ 我嘗試了@Costas 的以下建議並遇到了問題。我的文件是這樣的:
MODULE_ColumnA~MODULE_ColumnB~MODULE_ColumnC~MODULE_ColumnD~MODULE_ColumnE 8.2~Y~N~~0
如果我執行以下腳本
cat <filename> | awk -F'~' -v p='MODULE_ColumnD' -v r='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 Y N 99 0
如何取回記錄中的分隔符?
awk -F'|' -v p='Field3' -v r='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