【问题标题】:Compare two big files with awk用awk比较两个大文件
【发布时间】:2017-07-25 22:36:05
【问题描述】:

我参考了以下链接来比较两个文件: Compare files with awk

awk 'NR==FNR{a[$1];next}$1 in a{print $2}' file1 file2

如果在 file1 中找到 file2 的第 1 列,则打印 file2 的第 2 列。

但我的要求略有不同。如果在关联数组中找到 file2 的第一列(使用 file1 的第一列构建),如何打印 file1 的第二列?

【问题讨论】:

    标签: awk compare comparison


    【解决方案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]},它将打印 bar(已分配值)

    前面的{a[$1];next}创建了一个数组,名称为a,索引为$1,但值为null;它是a[$1]="". 的 stortcut

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

    【讨论】:

    • 你能解释一下“a[$1]=$2;”步 ?我无法理解你在做什么。但你的解决方案对我有用。
    • @Spartacus 现在清楚了吗?它只是赋值给数组然后打印数组。
    • 好的,非常感谢
    • @Spartacus 欢迎您。您还可以查看 StackOverflow 文档 Beta 部分,在标记 awk 下,其中有很多关于 awk 工作原理的解释。
    • @Spartacus 添加了更多解释。
    猜你喜欢
    • 2018-03-04
    • 2017-01-31
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2012-01-01
    相关资源
    最近更新 更多