Команда 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"