ลบบรรทัดที่ค่าของฟิลด์น้อยกว่าหรือเท่ากับ 3 - sed หรือ awk?


17

ฉันต้องการลบทุกบรรทัดที่มีค่า 2 หรือน้อยกว่าในฟิลด์ที่ 8 (คอลัมน์)

ข้อมูลของฉันมีลักษณะเช่นนี้:

12-31   Airport 189 379 41  49.70946503 -124.91377258   2   2880    30.8
01-01   AlberniElementary   165 331 16  49.26100922 -124.80662537   4   5760    26.1
01-09   BamfieldMarine  161 323 23  48.83490372 -125.13572693   2   2875    27.4
01-10   BamfieldMarine  161 323 23  48.83490372 -125.13572693   3   3068    38.6

ฉันเข้าใจว่าการใช้ awk ฉันสามารถตัดค่าที่ต้องการและพิมพ์ไปยังไฟล์อื่นและฉันเข้าใจว่า sed จะแก้ไขไฟล์ปัจจุบัน ไม่ว่าในกรณีใดฉันต้องเก็บไฟล์ต้นฉบับไว้

หมายเหตุ : โปรดให้คำอธิบายอย่างละเอียดพร้อมโซลูชันของคุณ มันไม่พอเพียงที่จะเขียนคำสั่งโปรดใส่คำแนะนำประกอบ

หมายเหตุเพิ่มเติม : ข้อมูลมีบรรทัดส่วนหัวดังนั้นวิธีแก้ปัญหาส่วนใหญ่จะต้อง

awk 'FNR> 1'

ฉันคิดว่า?

คำตอบ:


19

คุณเกือบจะได้รับมัน

 awk '(NR>1) && ($8 > 2 ) ' foo > bar

ที่ไหน

  • NR คือจำนวนเรคคอร์ด (นั่นคือจำนวนบรรทัด)
  • $8 คือแปดสนาม
  • && มีเหตุผลและ
  • foo เป็นไฟล์ต้นฉบับไม่เปลี่ยนแปลง
  • bar ไฟล์ผลลัพธ์
  • การกระทำเริ่มต้นโดยนัยคือการพิมพ์บรรทัดอินพุตปัจจุบัน

โปรดทราบว่าส่วนหัวนั้นมีลายจาก foo to bar เพื่อเก็บไว้

 awk '(NR==1) || ($8 > 2 ) ' foo > bar

ที่ไหน

  • || เป็นตรรกะหรือ
  • บรรทัดอินพุตถูกพิมพ์หาก NR == 1 หรือถ้า $ 8> 2

อัปเดต # 1

เพื่อระบุช่วง

  • ( ($8 >= -4) && ( $8 <= 4 ) ) สนามที่ 8 จาก -4 ถึง 4
  • (NR == 1 ) || ( ($8 >= -4) && ( $8 <= 4 ) ) เดียวกันรวมถึงส่วนหัว

คำตอบที่ดี: เรียบง่าย แต่ทั่วถึงขอบคุณ ดังนั้นฉันชัดเจนความแตกต่างระหว่าง FNR และ NR ในกรณีนี้คืออะไร ฉันได้อ่านman page ซึ่งอธิบาย: หมายเลข NR ของระเบียนปัจจุบัน & หมายเลข FNR หมายเลขลำดับของระเบียนปัจจุบันในไฟล์ปัจจุบัน ดังนั้นผมจึงเข้าใจเหล่านี้เหมือนกันในกรณีนี้ผมคิดว่า :)
geokrowding

หากคุณมีหนึ่งไฟล์ FNR จะเป็น NR เสมอหาก file1 มี 10 บรรทัดบรรทัดแรกของ file2 จะมี NR = 11 และ FNR = 1
Archemar

สวัสดีฉันต้องการที่จะทำสิ่งที่คล้ายกัน แต่ยอมรับทุกอย่างในช่วง -4 ถึง 4 ฉันจะทำสิ่งนี้อย่างไรเพราะนี่เป็นวิธีเดียวที่ฉันสามารถคิดได้ว่าจะทำในขณะนี้ awk '(NR == 1) || ($ 8 = [-4-4]) 'foo> bar
Giles

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