awk命令返回不一致的结果

时间:2017-06-06 22:58:24

标签: shell unix awk awk-formatting

我有一个脚本,可以在文件中执行多个验证。 其中一个验证是检查一行是否超过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 个答案:

答案 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"