ฉันจะกรองเอาท์พุทบางคอลัมน์ได้อย่างไร
ฉันต้องการสิ่งนี้:
tail -f logs/access_log | grep -v "200" --only-in-column=1
ดังนั้นฉันต้องการเห็นเฉพาะบรรทัดที่ไม่มีสตริง '200' ในคอลัมน์แรก
ฉันจะกรองเอาท์พุทบางคอลัมน์ได้อย่างไร
ฉันต้องการสิ่งนี้:
tail -f logs/access_log | grep -v "200" --only-in-column=1
ดังนั้นฉันต้องการเห็นเฉพาะบรรทัดที่ไม่มีสตริง '200' ในคอลัมน์แรก
คำตอบ:
awk อาจเป็นเครื่องมือที่เป็นที่ยอมรับสำหรับปัญหาประเภทนี้
$ cat data
foo 200 bar
foo 200 baz
bar 4 baz
$ cat data | awk '$2 != 200 { print $0 }'
bar 4 baz
สิ่งนี้จะได้ผล:
tail -f logs/access_log | grep -v '^200[[:blank:]]'
ซึ่งไม่รวมบรรทัดที่ขึ้นต้นด้วย "200" ตามด้วยช่องว่างหรือแท็บ
คุณสามารถเลือกชุดตัวคั่นที่แตกต่างกันตามความต้องการของคุณ
tail -f logs/access_log | grep -v '^200[^[:alnum:]]'
ซึ่งไม่รวมบรรทัดที่ขึ้นต้นด้วย "200" ตามด้วยอักขระอื่นที่ไม่ใช่ตัวอักษรหรือตัวเลข
{ print }
หรือละเว้นมันทั้งหมด (เพียงawk '$2 != 200'
) เนื่องจากprint $0
เป็นการกระทำเริ่มต้น