列中的值相等

时间:2018-05-27 14:52:46

标签: awk

我想检查第2列中的所有值是否相同。

如果第2列中的所有值都相等,则输出应为

2835:  OK

如果第2列具有不同的值,则输出应为

2835:  BAD

输入文件:

2835:  BAD
2835:  OK
2835:  OK
2835:  BAD
2835:  OK
2835:  BAD
2835:  OK
2835:  OK
2835:  OK

我的代码

awk '{a[$2]++} END { for (n in a ) print $0 " " n, a[n]}' file

输出

2835:  OK BAD 1
2835:  OK OK 35

输出所需

2835:  BAD

提前致谢。

3 个答案:

答案 0 :(得分:1)

使用GNU grep:

row

答案 1 :(得分:1)

对于一个文件:

awk ‘NR == 1 { a = $1; b = $2 }
     $2 != b { print a, “BAD”; exit 0 }
     END     { if (NR) print a, “OK” }’ file

对于多个文件(每个文件一行输出):

awk ‘
    function f() {
        if (ok != “”)
            print a, ok
        ok = “OK”
    }
    FNR == 1 {
        f()
        a = $1
        b = $2
    }
    $2 != b {
        ok = “BAD”
    }
    END {
        f()
    }’ file0 file1

答案 2 :(得分:1)

任何awk:

$ awk '!seen[$2]++{cnt++} END{print "2835:  " (cnt>1 ? "BAD" : "OK")}' file
2835:  BAD

或者如果输出的第一个字段与您的输入值相关:

$ awk '{key=$1} !seen[$2]++{cnt++} END{print key "  " (cnt>1 ? "BAD" : "OK")}' file
2835:  BAD

更有效率:

$ awk '{key=$1} !seen[$2]++ && cnt++{exit} END{print key "  " (cnt>1 ? "BAD" : "OK")}' file
2835:  BAD