首页 > 解决方案 > awk 比较两个文件并用 NA 填充空白行

问题描述

我正在尝试使用来自awk 的类似命令比较两个文件中的列,估算另一列的值,并查看与来自一个文件的我的 awk 搜索列类似的各种问题 ,如果匹配来自两个文件的打印列如何导入其他列中的字段对应于两个文件中的一个公共字段,在所有不匹配的列中具有“NA”awk 比较 2 个文件,文件中的 2 个字段不同的顺序,打印或合并匹配和非匹配行 与具有更多字段但我​​的文件无法让它工作。我还阅读了http://theunixshell.blogspot.com/2012/12/i-have-two-files-file-1-contains-3.html以查看它是否有效,但我仍然遇到问题:

文件 1:

xx NC1 12 13 ! pro

xy NC1 15 17 ! pro

yx NC1 18 20 ! pro

yy NC1 22 28 ! pro

文件 2

xx ds

xy jt

yy wp

所需的输出:

xx NC1 12 13 ! pro ds

xy NC1 15 17 ! pro jt

yx NC1 18 20 ! pro NA

yy NC1 22 28 ! pro wp

我正在使用的代码:

awk 'NR==FNR { a[$1]=$6; next }{print $0 "   "  ($2 in a ? a[$2] : "NA")}' file2 file1 

所以基本上我的输出给了我一个新的列,都是“NA”,这显然不是我想要的。

输出:

xx NC1 12 13 ! pro NA

xy NC1 15 17 ! pro NA

yx NC1 18 20 ! pro NA

yy NC1 22 28 ! pro NA

标签: unixawk

解决方案


你很亲密。

awk 'NR==FNR {a[$1]=$2;next}{print $0, ($1 in a ? a[$1]:"NA")}' f2 f1

您的问题是,您将 thefile2作为第一个参数,但是,您认为它是file1. file2根本没有$6


推荐阅读