Linux

awk 過濾一列日誌文件

  • April 7, 2019

我正在嘗試使用以下命令來提取目前日期的時間段並 grep 獲取特定消息,如下所示:

awk -v date="$(date +%Y%m%d')" '$1="date" && $3>"180000" && $3<"192000"' /app/exploit/log/FILE_send.log | grep "End success file transfer /app/reception/FILENAME.dat to HOSTX"

但是我無法按第一個日期列進行過濾。這是當我從 awk 命令中刪除變數並在 $1=20190405 上指定日期時 awk 命令的輸出:

1 - 180050 | INFO | FILE_SEND.sh | | FILENAME.dat | 1800498307000 | End success file transfer /app/reception/FILENAME.dat to HOSTX

這是日誌的行:

20190405 - 180050 | INFO   | FILE_SEND.sh    |          | FILENAME.dat                    | 1800498307000 | End success file transfer /app/reception/FILENAME.dat to HOSTX

我看不到該列被 1 替換的原因。如何過濾當天的第一列。

您可以使用以下命令:

awk -F'[-|]'  -v date="20190405" '$1 == date && $2>180000 && $2<192000' file_name | grep "End success file transfer /app/reception/FILENAME.dat to HOSTX"

命令的輸出awk將是:

20190405 - 180050 | INFO   | FILE_SEND.sh    |          | FILENAME.dat                    | 1800498307000 | End success file transfer /app/reception/FILENAME.dat to HOSTX

使用可變日期:

awk -F'[-|]'  -v date="$(date +%Y%m%d)" '$1 == date && $2>180000 && $2<192000' filename

引用自:https://unix.stackexchange.com/questions/510986