我有一个脚本在文件中执行多个验证。 验证之一是检查一行是否超过95个字符(包括空格)。如果是,则会返回行数超过95个字符的行号。下面是用于验证的命令:awk命令返回不一致的结果
$(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命令。
你觉得呢'$(猫$文件名> $临时文件)'是要干什么?我认为它会将'$ FileName'命名的文件与'tempfile'连接起来,并将输出放在文件'$'中。然后捕获标准输出 - 幸运的是标准输出为空 - 并将该输出解析为命令并运行。你不需要'$(...)',你可能想使用'cat“$ FileName”>“$ tempfile”' - 虽然不清楚为什么你需要一个输入的副本来处理;你显然可以使用原始文件。 –
请注意'grep -vn [9] [4]'命令是奇数;它与'grep -vn 94'相同并搜索不包含'94'的行(输出行号和匹配文本)。请注意,这意味着长度为'194','294','940','1945'等的行将不会被选中(以及长度为“94”的行)。 –
对不起,我没有注意到tempFile之前的空间,当我在这里编写代码时,你是正确的,它应该是$ tempFile。输入的副本可能只是用于备份,当我得到多次修改的脚本时就是这样。对于grep-vn [9] [4],我不知道它不会选择这些行,我向他解释的是,grep会检查文件是否有多于94个字符的行。 – Patrick