Awk как условный - PullRequest
       11

Awk как условный

0 голосов
/ 02 ноября 2018

Хорошо, так что я провел некоторое исследование и не нашел ничего, что подходило бы моей проблеме, и я новичок в сценариях оболочки. Итак, если у меня есть CSV-файл:
азбука, 123456
азбука, 123456
азбука, 123456
азбука, 123456

Я хочу проверить, соответствует ли число столбцов переданной переменной, используя awk, это не сложно.

Если есть несоответствие, скажите:
азбука, 123456
азбука,
азбука, 123456
азбука, 123456

создается журнал с указанием строки, что ожидалось и что на самом деле там было. Проблема, которую я имею, пытается пропустить процесс регистрации, если нет несоответствия. Мне нужно, чтобы он пропускал файлы, где все совпадает, и просто записывает файлы, которые имеют несоответствия, но все, что я пробовал, похоже, не работает. Пробует awks внутри операторов if, пробует awks с операторами if, множественные awks с разрывом или выходом, который только что дал мне синтаксические ошибки. Я в недоумении. Любые предложения будут полезны.

Ожидаемый результат очень прост.

имя файла
ожидаемая линия фактическая
2 3 1

между числами будет соответствующий интервал, lol

1 Ответ

0 голосов
/ 02 ноября 2018

Вы должны выполнить вход в систему awk, поэтому, если нечего сообщать, не будет никаких записей журнала.

$ awk -F, -v r=3 'BEGIN {header="line expected actual"}
                  NF!=r {if(!p) print FILENAME "\n" header >> "log.txt";
                         print NR,r,NF >> "log.txt"; p=1 }' file

здесь мы сохраняем состояние для печати информации заголовка в переменной p, поэтому она будет напечатана только один раз, если будут какие-либо несоответствия. В противном случае скрипт будет молчать. В качестве альтернативы вы можете накапливать несовпадающие строки и печатать в блоке END.

Вы можете избежать создания пустых файлов журнала, переместив файл print в скрипт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...