проверить и вернуть неверные данные - PullRequest
0 голосов
/ 17 марта 2012

Мне нужно проверить следующие данные и сообщить количество строк, которые не соответствуют заданному критерию.

set 582:1960:4c31ed7dea 2012-03-10~23:55:00\r\n
set 565:388:13c10fd316 2012-03-10~23:55:00\r\n
set 519:348:361189d4b9 extra_text 2012-03-10~23:55:00\r\n
set 498:5634:6047172ecc 2012-03-10~23:55:00\r\n
set 565:0:bf7a80ee4f 2012-03-10~23:55:00

1) Все строки должны начинаться со слова "set" и заканчиваться "\"r \ n "

2) Во всех строках должно быть ровно 3 поля, разделенных пробелом.

В данных примера он должен возвращать неверное количество строк: 2 и предпочтительно всю строку,Третья строка содержит дополнительное слово, а пятая строка не заканчивается правильно.

Ответы [ 2 ]

1 голос
/ 17 марта 2012

awk хорошо для этого. Довольно полнофункциональный скрипт:

#!/usr/bin/awk -f

BEGIN {ends = fields = total = 0 }

NF != 3 || !/\r$/ {
    total++
    if(NF != 3) fields++
    if(!/\r$/) ends++
    print
}

END {
    printf "Wrong number of fields: " fields
    printf "Did not end in a CR: " ends
    printf "Total: " total
}

Короткий однострочный, печатает только оскорбительные строки:

awk 'NF != 3 || !/\r$/' file

Всего отпечатков и подсчетов:

awk 'NF!=3||!/\r$/{total++} END{print "Total: " total}
1 голос
/ 17 марта 2012

Для печати недопустимых строк:

grep -v '^set [^ ][^ ]* [^ ][^ ]*\\r\\n$' FILENAME

Для печати количества недопустимых строк:

grep -cv '^set [^ ][^ ]* [^ ][^ ]*\\r\\n$' FILENAME
...