用awk比较两个大文件

用awk比较两个大文件,awk,compare,comparison,Awk,Compare,Comparison,为了比较两个文件,我参考了以下链接: 如果在文件1中找到文件2的第一列,它将打印文件2的第二列 但我的要求没有什么不同。如果在关联数组中找到文件2的第一列(使用文件1的第一列构建),如何打印文件1的第二列 有了这个: awk 'NR==FNR{a[$1]=$2;next}$1 in a{print a[$1]}' file1 file2 通过这种方式,可以为数组a的每个数组元素指定一个值。 对于包含字段foo-bar的行,您实际上创建了a[foo]=bar 如果您稍后发出命令{print a

为了比较两个文件,我参考了以下链接:

如果在文件1中找到文件2的第一列,它将打印文件2的第二列

但我的要求没有什么不同。如果在关联数组中找到文件2的第一列(使用文件1的第一列构建),如何打印文件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];下一个}
创建一个名为
a
且索引为
$1
的数组,但值为null;它是一个由“
a[$1]=”组成的存储库。

整个过程都在awk中工作,因为awk有一种在{print something}中使用
$1在数组中查找索引的简单方法。这是一个awk
if-then
快捷方式。
这与
{if($1 in a){print something}}}
类似。这一点的好处在于a
中的
$1部分指的是数组
a
索引,而不是数组值

你能解释一下“a[$1]=2;”步骤吗?我无法理解你在做什么。“但是你的解决办法对我有用。”斯巴达克斯,现在明白了吗?这只是给数组赋值,然后打印数组。是的,非常感谢much@Spartacus不客气。您还可以在StackOverflow Documentation Beta部分的tag awk下查看关于awk工作原理的大量解释。@Spartacus添加了更多解释。
awk 'NR==FNR{a[$1]=$2;next}$1 in a{print a[$1]}' file1 file2