用awk比较两个大文件
为了比较两个文件,我参考了以下链接: 如果在文件1中找到文件2的第一列,它将打印文件2的第二列 但我的要求没有什么不同。如果在关联数组中找到文件2的第一列(使用文件1的第一列构建),如何打印文件1的第二列 有了这个:用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
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在数组中查找索引的简单方法。这是一个awkif-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