Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

awk 多行合併技巧:next 指令實戰教學與範例解析

編輯:Linux 教學

處理結構化日誌或設定檔時,常需將多行合併為單行輸出(類似 SQL 的行轉列)。awk 的 next 陳述式能精準控制流程,實現這類需求。

next 基本行為

awk 'NR%2==1{next}{print NR,$0}' text.txt
  • NR%2==1:奇數行觸發 next
  • next:立即跳過後續動作,直接讀取下一行
  • 偶數行執行 print

輸出:

2 b
4 d

實戰案例:服務狀態整理

原始資料 (test.txt)

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

邏輯拆解

  1. /^web/:匹配以 web 開頭的行(主機名行)
  2. T=$0:將整行存入變數 T
  3. next:跳過後續列印,直接讀取下一行(服務狀態行)
  4. {print T":\t"$0}:非主機名行執行,輸出「主機名: 服務狀態」

進階應用:多行記錄合併

若每筆記錄固定 4 行(主機名 + 3 服務),可用計數器控制:

awk '
/^web/{host=$0; count=0; next}
{print host": "$0; count++}
count==3{host=""}
' test.txt

next 適用場景總結

  • 跳過特定模式行(如標題、註解)
  • 多行合併:暫存關鍵行,後續行引用
  • 條件式處理:滿足條件即進入下一循環
  • 效能優化:提早結束當前行處理

next 是 awk 流程控制的利器,善用它能以極簡潔程式碼解決複雜文字重組問題。

Copyright © Windows教程網 All Rights Reserved