ฉันจะไพพ์เอาต์พุตจนถึงวันที่ -d“ value” ได้อย่างไร?


15

ฉันมีวันที่ "2014-01-30 05:04:27 GMT" และถ้าฉันเรียกใช้วันที่ -d "2014-01-30 05:04:27 GMT" ผลลัพธ์จะอยู่ในเขตเวลาของเซิร์ฟเวอร์ของฉัน ("พฤหัสบดี 30 มกราคม 16:04:27 EST 2014 ")

ด้วยการใช้ grep และ cut ฉันได้แยกวันที่ในไฟล์ GMT ออกจากไฟล์ อย่างไรก็ตามฉันกำลังดิ้นรนเพื่อแปลงสิ่งนี้เป็นเวลาท้องถิ่นของฉัน

ตัวอย่างเช่น:

[user @ server log] # grep "something" logfile.txt | grep "สำเร็จแล้ว" | ตัด -f1 -d '['

เอาท์พุท: 2014-01-30 05:04:27 GMT

สิ่งที่ฉันสามารถเพิ่มในตอนท้ายเพื่อส่งออกไปที่ "date -d"?

พยายาม:

  • [user @ server log] # grep "something" logfile.txt | grep "สำเร็จแล้ว" | ตัด -f1 -d '[' | วันที่ -d
  • [user @ server log] # grep "something" logfile.txt | grep "สำเร็จแล้ว" | ตัด -f1 -d '[' | วันที่
  • [user @ server log] # grep "something" logfile.txt | grep "สำเร็จแล้ว" | ตัด -f1 -d '[' | วันที่ -d "$ 1"

คำตอบ:


13
gmt="$(grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[')"
date -d "$gmt"

หรือหากคุณต้องการรูปแบบไพพ์ไลน์:

grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | { read gmt ; date -d "$gmt" ; }

ปัญหาคือdateไม่ได้ใช้ stdin ดังนั้นเราจึงต้องจับ stdin ลงในตัวแปร (เรียกว่าgmtที่นี่) dateแล้วว่าในวันที่จัดหาบรรทัดคำสั่งเพื่อ

ตัวอย่างผลลัพธ์จากวิธีที่สอง:

$ echo  "2014-01-30 05:04:27 GMT" | { read gmt ; date -d "$gmt" ; }
Wed Jan 29 21:04:27 PST 2014

1
ขอบคุณการแก้ไขปัญหา! ขอบคุณที่คุณอธิบายเหตุผลที่อยู่เบื้องหลังว่าทำไมมันไม่ทำงาน
เชน

20

หากคุณใช้วันที่ GNU จาก coreutils ที่ผ่านมาอย่างเพียงพอนั่นก็คือdate -fจากหน้าจอความช่วยเหลือ:

-f, --file=DATEFILE       like --date once for each line of DATEFILE

ดังนั้นความพยายามของคุณ 4 น่าจะเป็น:

$ grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date -f -

สุดท้าย-หมายถึง stdin


2
นี่ควรเป็นคำตอบที่ยอมรับได้
Petrus K.

เป็นไปได้หรือไม่ที่จะเปรียบเทียบผลลัพธ์ของคำสั่งด้านบนกับวันที่ระบุ เช่น. ฉันต้องการแสดงรายการวันที่ทั้งหมดที่เก่ากว่า "Wed Jan 30 21:04:27 PST 2014"
Manu

@Manu ไม่ได้ต่อ se วันที่มีdategrepสำหรับกรณีการใช้งานที่เฉพาะเจาะจง
hroptatyr

ง่ายกว่านี้มาก ๆ ! ถ้าฉันอ่านได้ฉันอาจพบสิ่งนี้ในหน้าคน
Ken Sharp
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.