【问题标题】:Comparing two files and printing 2nd column if value of column 1 (file1) is less than to value of column 1 in file 2如果第 1 列(file1)的值小于文件 2 中第 1 列的值,则比较两个文件并打印第 2 列
【发布时间】:2021-10-11 00:39:38
【问题描述】:

我有 2 个文件。

文件 1:

abc 40
cde 50
efg 100

文件 2:

cde 35
efg 100
abc 45

输出应该是

cde "value is below normal"

如果文件 2 的第 2 列的值小于文件 1 的第 2 列的值,它将打印第 1 列和文本 value is below normal

我正在用 awk 尝试这个,但是当我使用 if 条件时出现语法错误。

【问题讨论】:

  • 欢迎来到 Stack Overflow (SO)。 SO is a question and answer page for professional and enthusiast programmers。请在您的问题中添加您自己的代码。您应该至少展示自己为解决这个问题所做的研究。
  • edit您的问题并显示您的awk代码。然后我们可以帮助您修复代码中的语法错误或其他问题。此外,如果在文件 1 中找不到文件 2 中一行的第一个值,您应该定义应该发生的情况,或者说明在您的用例中是否不能发生这种情况。
  • 你能告诉我们你尝试了什么吗?

标签: shell unix awk


【解决方案1】:

这很简单:

#!/usr/bin/awk -f
NR == FNR {
    first[$1]=$2
}
NR != FNR {
    second[$1]=$2
}
END {
    for (i in second) {
        if (second[i] < first[i])
            print i, "\"value is below normal\""
    }
}

第一个模式 (NR == FNR) 是一个 AWK 技巧,仅匹配第一个文件,其规则将所有遇到的值添加到 first 数组。第二个模式是相同的,除了它只匹配第二个(以及第三个、第四个等,但在这里无关紧要)文件并将值添加到second 数组。处理完两个文件后,最后一条规则会遍历所有记住的值,比较它们并按照您的要求打印结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多