簡體   English   中英

awk命令返回不一致的結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM