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

Linux awk 多行合併實戰:next 語句巧妙應用

編輯:關於 Linux

awk 作為文本處理利器,next 語句能跳過當前行直接進入下一輪匹配,配合變量暫存實現多行合併。本文通過實戰案例詳解 next 核心用法與多行合併技巧。

next 基礎語法

awk 'condition { next } { action }' file

當 condition 滿足時,跳過後續 action,直接讀取下一行重新評估條件。

基礎示例:輸出偶數行

# 文件內容:a b c d e(每行一字母)
awk 'NR%2==1 { next } { print NR, $0 }' text.txt
# 輸出:
2 b
4 d

奇數行觸發 next 跳過打印,偶數行執行打印動作。

實戰案例:服務狀態多行合併

源數據格式

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; next } 將整行存入變量 T,next 跳過打印,進入下一行
  3. { print T ": \t" $0 } 非主機行執行:輸出暫存的主機名 + 當前行服務狀態

進階變體

合併固定行數(如每 3 行合 1 行)

awk 'ORS=NR%3?",":"\n"' file

跨文件合併(配合 getline)

awk '{ getline line < "file2"; print $0, line }' file1

避坑指南

  • next 僅影響當前文件處理流程,getline 可跨文件讀取
  • 變量 T 未初始化時為空字符串,首行非匹配行會輸出前綴冒號
  • 大文件處理建議使用 awk -v var=value 傳遞參數避免 Shell 展開問題

靈活運用 next 控制流程,讓 awk 處理複雜多行文本輕鬆自如。

Copyright © Windows教程網 All Rights Reserved