
我想執行以下任務,
1) 若行字數 = 1 則列印單字
2)若行字數> 3,則列印第4個字
3) 在所有其他情況下列印空白行
輸入檔是,
cat file.txt
Hi there I welcome you
Hi there You
Hi
Hi there
Hi there I welcome you all
預期輸出是,
welcome
Hi
welcome
當我使用下面的程式碼時,它給我的輸出帶有額外的空行,這是預期之外的。
cat file.txt | awk '{ if (NF>3) {print $4} else if (NF==1) {print $1} else {print "\n"} }'
welcome
Hi
welcome
我已經使用下面的程式碼解決了這個問題,
cat file.txt | awk '{ if (NF>3) {print $4} else if (NF==1) {print $1} else {print $10000} }'
welcome
Hi
welcome
但是我想了解出了什麼問題以及為什麼 else 語句被執行了兩次並給出了意外的輸出?
答案1
這是因為print
語句預設在其列印的字串末尾添加換行符。與它一起使用時,\n
會列印一個雙換行符,正如您在輸出中看到的那樣。printf
改用
awk '{ if (NF>3) {print $4} else if (NF==1) {print $1} else printf "\n" }' file
如果沒有顯式的分支結構,if..else if..else
你可以這樣做
awk 'NF>3 { print $4; next } NF==1 { print $1; next } { printf "\n" }'
答案2
該print
命令始終添加換行符。因此print "\n"
列印您指定的換行符以及它所新增的換行符。
您可以使用print ""
或printf "\n"
。