[英]awk command returns inconsistent result
我有一個腳本,可以在一個文件中執行多個驗證。 驗證之一是檢查一行是否超過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命令。
這寫得不好。 所有你需要的是:
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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.