處理結構化日誌或設定檔時,常需將多行合併為單行輸出(類似 SQL 的行轉列)。awk 的 next 陳述式能精準控制流程,實現這類需求。
awk 'NR%2==1{next}{print NR,$0}' text.txt
NR%2==1:奇數行觸發 nextnext:立即跳過後續動作,直接讀取下一行print輸出:
2 b
4 d
web01[192.168.2.100]
httpd ok
tomcat ok
sendmail ok
web02[192.168.2.101]
httpd ok
postfix ok
web03[192.168.2.102]
mysqld ok
httpd ok
web01[192.168.2.100]: httpd ok
web01[192.168.2.100]: tomcat ok
web01[192.168.2.100]: sendmail ok
web02[192.168.2.101]: httpd ok
web02[192.168.2.101]: postfix ok
web03[192.168.2.102]: mysqld ok
web03[192.168.2.102]: httpd ok
awk '/^web/{T=$0;next}{print T":\t"$0}' test.txt
/^web/:匹配以 web 開頭的行(主機名行)T=$0:將整行存入變數 Tnext:跳過後續列印,直接讀取下一行(服務狀態行){print T":\t"$0}:非主機名行執行,輸出「主機名: 服務狀態」若每筆記錄固定 4 行(主機名 + 3 服務),可用計數器控制:
awk '
/^web/{host=$0; count=0; next}
{print host": "$0; count++}
count==3{host=""}
' test.txt
next 是 awk 流程控制的利器,善用它能以極簡潔程式碼解決複雜文字重組問題。