我正在合并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
如何更改脚本以将file1中的" -9"保留(当没有第1列与file2匹配时(,或者(替代(在输出文件的第6列中替换null值,然后用" -9"替换null值(注意:从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
谢谢!
可以使用语法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
$ 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