แยกเนื้อหาจากไฟล์บันทึกสำหรับ 5 นาทีที่ผ่านมา


1

ฉันพยายามใช้คำสั่ง awk เพื่อแยกเนื้อหาจากไฟล์บันทึกสำหรับ 5 นาทีที่ผ่านมา ด้านล่างเป็นคำสั่งที่ฉันใช้

`awk -v d1="$(date --date="-5 min" "+%m/%d/%y %k:%M:%S:%3N")" -v d2="$(date "+%m/%d/%y %k:%M:%S:%3N")" '$0 > d1 && $0 < d2 || $0 ~ d2' /tmp/test.log

พบว่าเงื่อนไข'$0 > d1 && $0 < d2 || $0 ~ d2'ใช้ได้กับรูปแบบวันที่ที่ระบุเท่านั้น รูปแบบวันที่ในบันทึกของฉันอยู่ด้านล่าง: [2/9/17 13: 30: 35: 552 EST] คำสั่งที่ฉันเรียกใช้ข้างต้นไม่ทำงาน ..

แต่เมื่อฉันทดสอบรูปแบบวันที่อื่น ๆ เช่นด้านล่าง: 9 ก.พ. 14:01

สภาพการทำงาน

awk -v d1="$(date --date="-30 min" "+%b %_d %H:%M")" -v d2="$(date "+%b %_d %H:%M")" '$0 > d1 && $0 < d2 || $0 ~ d2' /tmp/test2.log

ความคิดใดที่ว่าทำไมเงื่อนไขไม่ทำงานในรูปแบบวันที่ [2/9/17 13: 30: 35: 552 EST] นี้

คำตอบ:


0

สมมติว่า[2/9/17 13:30:35:552 EST]เป็นรูปแบบเพื่อให้17ยืนอยู่เสมอสำหรับ2017และการแปลงเขตเวลาจะไม่เกิดปัญหา ( ESTจะถูกละเว้น)

สมมติว่านี่เป็นบันทึกตัวอย่าง:

$ cat test.log 
[2/1/17 10:30:35:000 EST] a
[2/2/17 13:30:31:553 EST] bbb
[2/9/17 09:00:00:000 EST] ccc
[2/9/17 13:30:33:657 EST] ddd

ฉันคิดว่าคุณชอบอะไรแบบนั้น:

$ ./calc.sh '2017-02-01 10:00:00' 2017-02-03
[2/1/17 10:30:35:000 EST] a
[2/2/17 13:30:31:553 EST] bbb

$ ./calc.sh '1 Feb 2017' now
[2/1/17 10:30:35:000 EST] a
[2/2/17 13:30:31:553 EST] bbb
[2/9/17 09:00:00:000 EST] ccc
[2/9/17 13:30:33:657 EST] ddd

$ ./calc.sh '5 Feb 2017' now
[2/9/17 09:00:00:000 EST] ccc
[2/9/17 13:30:33:657 EST] ddd

นี่คือโซลูชันของฉัน (ขยายด้วยตัวแปรจำนวนมากเพื่อความชัดเจน):

$ cat calc.sh 
#!/bin/bash

awk -v d1="$(date +%s --date="$1")" -v d2="$(date +%s --date="$2")" '
{
    tDate = substr($1, 2)
    split(tDate, dToken, "/")
    month = dToken[1]
    day = dToken[2]
    year = "20"dToken[3]

    tTime = $2
    tTZ = substr($3, 1, length($3) - 1)
    split(tTime, tToken, ":")
    hh = tToken[1]
    mm = tToken[2]
    ss = tToken[3]

    ts = mktime(year" "month" "day" "hh" "mm" "ss)

    # maybe >= and <= would be better
    if ((ts > d1) && (ts < d2)) {
        print
    }
}
' test.log
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.