我正在合并file1:
ID_0001 0001 0 0 1 -9
ID_0002 0002 0 0 1 -9
ID_0003 0003 0 0 1 -9
ID_0004 0004 0 0 1 -9
和file2:
ID_0001 0001 1.25
ID_0002 0002 3.09
ID_0004 0004 2.69
基于每个输入文件的第1列中的公共值,使用以下awk命令:
awk 'NR==FNR {h[$1] = $3; next} {print $1,$2,$3,$4,$5,h[$1]}' file2 file1 > file3
生成的输出文件(file3)如下所示:
ID_0001 0001 0 0 1 1.25
ID_0002 0002 0 0 1 3.09
ID_0003 0003 0 0 1
ID_0004 0004 0 0 1 2.69
如何更改脚本以保留" -9" from file1(当没有列1与file2匹配时),或者(或者)用" -9"替换输出文件的第6列中的空值。 (注意:首选保留file1中的第6列值(即选项1):
期望的输出:
ID_0001 0001 0 0 1 1.25
ID_0002 0002 0 0 1 3.09
ID_0003 0003 0 0 1 -9
ID_0004 0004 0 0 1 2.69
谢谢!
答案 0 :(得分:1)
可以使用语法condition?true_actions:false_actions
中的三元条件运算符来完成,如下所示:
awk 'NR==FNR {h[$1] = $3; next} {print $1,$2,$3,$4,$5,$1 in h?h[$1]:$6}' file2 file1
ID_0001 0001 0 0 1 1.25
ID_0002 0002 0 0 1 3.09
ID_0003 0003 0 0 1 -9
ID_0004 0004 0 0 1 2.69
这是有效的,因为最后一部分$1 in h?h[$1]:$6
在伪代码中意味着:
if $1 of current file=file1 belongs in keys of array h,
then
print h[$1]
else
print $6 of current file=file1
答案 1 :(得分:1)
$ awk 'NR==FNR{a[$1]=$3;next} $1 in a{$6=a[$1]} 1' file2 file1
ID_0001 0001 0 0 1 1.25
ID_0002 0002 0 0 1 3.09
ID_0003 0003 0 0 1 -9
ID_0004 0004 0 0 1 2.69