我有一个脚本,可以在文件中执行多个验证。 其中一个验证是检查一行是否超过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命令。
答案 0 :(得分:2)
写得不好。您所需要的只是:
awk 'length>94{print NR; f=1} END{exit f}' file
如果有超过94个字符的行,它将打印行号和状态为1的退出;否则退出状态将为0,不会生成任何输出。
答案 1 :(得分:0)
您的脚本应该是:
awk '
length()>95 { printf "%s%d", (c++?",":""), NR }
END { if (c) {print "line too long"; exit 1} }
' "$FileName"