将字符串附加到输出文件中的null值



我正在合并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

相关内容

  • 没有找到相关文章