首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Awk 分隔符 `][` 深度解析:按 `][` 切割欄位並篩選第四欄時間範圍

     編輯:程式設計綜合問答

指令拆解

awk -F '\]\[' '$4>=beg && $4<=end {print $0}' beg=$beg_tm end=$end_tm ${arrfile[i]}

核心參數說明

  • `-F '\]\['`:指定輸入欄位分隔符為正則 `] [`(即「右中括號 + 左中括號」)。Awk 會把每一行依此字串切割成多個欄位($1, $2, $3…)。
  • `$4>=beg && $4<=end`:條件判斷——第四欄($4)數值落在變數 `beg` 與 `end` 之間(含邊界)。
  • `{print $0}`:滿足條件時輸出整行原始內容。
  • `beg=$beg_tm end=$end_tm`:將 Shell 變數傳入 Awk 內部變數,方便動態調整時間窗。
  • `${arrfile[i]}`:處理陣列中第 i 個檔案路徑。

實際資料範例

假設日誌行格式如下:

[2024-01-01][10:00:00][INFO][1704067200][UserLogin] user=alice
[2024-01-01][10:05:00][WARN][1704067500][DiskFull] path=/var/log

以 `][` 切割後:

<-- Unix 時間戳,供篩選
欄位內容
$1[2024-01-01
$210:00:00
$3INFO
$41704067200
$5UserLogin] user=alice

常見坑點

  • 若行尾無 `]`,最後一欄會包含殘留字元,建議先 `sed 's/\]$//'` 清理。
  • `$4` 需為純數字才能正確比較;若含非數字字元,Awk 會當字串比較,導致邏輯錯誤。
  • 大檔案建議改用 `mawk` 或 `gawk --posix` 加速。

延伸應用

同理可用於任何「雙字元分隔符」場景,如 `}{`、`||`、`::` 等,只需在 `-F` 後給對應正則(需轉義特殊字元)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved