我有以下文件
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”。
[编辑]
我尝试了@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
如何取回记录中的分隔符?
答案1
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