Равные значения в столбце - PullRequest
0 голосов
/ 27 мая 2018

Я бы хотел проверить, все ли значения в столбце 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 голосов
/ 27 мая 2018

Для одного файла:

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
0 голосов
/ 27 мая 2018

С любым 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
0 голосов
/ 27 мая 2018

С GNU grep:

grep -m 1 BAD file || grep -m 1 OK file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...