сравнивать по номеру awk результат не верный - PullRequest
0 голосов
/ 22 сентября 2019

Я использую awk, чтобы получить количество полей для нескольких файлов, а затем использую if [[ ]], чтобы определить, равно ли число полей точному числу, и если да, то вернуть имя файла.

Код выглядит следующим образом:

for file in /root/TB_MOVIL_CDR/incorrect_files/*
do
  num=$(awk -F '|' '{print NF}' $file)
  if [[ $num -eq 24 ]];then
    echo $file
  fi
done

Но если найденный результат неверен, я запутался, синтаксис if [[ $num -eq 24 ]] неверен?

1 Ответ

0 голосов
/ 22 сентября 2019

Нет необходимости в командах bash, когда вы используете awk, попробуйте это:

awk -F'|' 'NF==24 {print FILENAME}' /root/TB_MOVIL_CDR/incorrect_files/*

Это будет проверять, равно ли число полей в каждой строке 24 файла, и находит ли оно строкус 24 полями, он напечатает имя файла.Примечание: если есть несколько файлов с 24 полями, он печатает имя файла несколько раз.Этого можно избежать при необходимости.

Вы можете использовать это gnu awk для печати имени файла только один раз для каждого файла с 24 полями (gnu из-за функции ENDFILE):

awk -F'|' 'NF==24 {f=1} ENDFILE {if (f) print FILENAME;f=0}' /root/TB_MOVIL_CDR/incorrect_files/*

Короче gnu awk, которые печатают имя файла один раз для каждого файла.

awk -F'|' 'NF==24 {print FILENAME;nextfile}' /root/TB_MOVIL_CDR/incorrect_files/*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...