我从以下链接中获取了比较两个文件的参考: Compare files with awk
awk 'NR==FNR{a[$1];next}$1 in a{print $2}' file1 file2
如果在file1中找到第一列file2,则打印file2的第二列。
但我的要求略有不同。如果在关联数组中找到file2的第一列(用file1的第一列构建),如何打印file1的第二列?
答案 0 :(得分:1)
有了这个:
awk 'NR==FNR{a[$1]=$2;next}$1 in a{print a[$1]}' file1 file2
通过这种方式,您可以为数组a
的每个数组元素分配一个值。
对于包含字段foo bar
的行,您实际创建了a[foo]=bar
如果您稍后发出命令{print a[foo]}
,它将打印条形图(它的指定值)
上一个{a[$1];next}
创建一个名为a
且索引为$1
的数组,但值为null;它是a[$1]="".
整个东西在awk中工作,因为awk有一种简单的方法可以使用$1 in a{print something}
在数组中查找索引。这是一个awk if then
快捷方式。
它与{if ($1 in a) {print something}}
相同。关于这一点的好处是部分$1 in a
引用数组a
索引而不是数组值。