我想检查第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
提前致谢。
答案 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