Команда awk возвращает противоречивый результат

У меня есть скрипт, который выполняет несколько проверок в файле. Одной из проверок является проверка, превышает ли строка 95 символов (включая пробелы). Если это так, он вернет номер строки / с, где строка превышает 95 символов. Ниже приведена команда, используемая для проверки:

$(cat $FileName > $tempfile)
totalCharacters=$(awk '{print length($0);}' $tempFile | grep -vn [9][4])
if [[$totalCharacters != "" ]]; then
  totalCharacters=$(awk '{print length($0);}' $tempFile | grep -vn [9][4] | cut -d : -f1 | tr "\n" ",")
  echo "line too long"
  exit 1
fi

В нижней среде код работает как положено. Но в производстве есть время, когда проверка возвращает ошибку "слишком длинная строка", но не возвращает номер строки. Мы просто перезапускаем скрипт, и он не возвращает никаких ошибок.

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

2 ответа

Решение

Это не очень хорошо написано. Все, что тебе нужно:

awk 'length>94{print NR; f=1} END{exit f}' file

Если строки длиннее 94 символов, будут напечатаны номера строк и выход со статусом 1; в противном случае состояние выхода будет 0, и выход не будет сгенерирован.

Ваш скрипт должен быть просто:

awk '
    length()>95 { printf "%s%d", (c++?",":""), NR }
    END { if (c) {print "line too long"; exit 1} }
' "$FileName"
Другие вопросы по тегам