awk ถูก จำกัด ให้ทำงานเพียงหนึ่งบรรทัด?


1

ชอบในเรื่อง สมมติว่าฉันมีไฟล์ที่มี:

* aaa ABC

DEF 55

* ccc ABC

RET 33

และฉันจะรู้ว่ามันมีความเป็นไปได้ที่จะทำให้คำสั่งถ้า $ 1 == "* aaa" แล้วพิมพ์ $ 4 จากบรรทัดถัดไป ฉันรู้ว่าหนึ่งในวิธีแก้ปัญหาอาจเป็นไฟล์คอนแวนต์สำหรับเอาต์พุตนี้:

* aaa ABCDEF 55

* ccc ABCRET 33

ใช้ "*" เป็นตัวคั่นบรรทัด แต่ฉันต้องการหลีกเลี่ยงสิ่งนี้

ขอแสดงความนับถือลูคัส

คำตอบ:


1

ใช้ตัวแปร (เรียกว่าprimedในตัวอย่าง) ซึ่งถูกตั้งค่าหากพบคู่ที่ตรงกัน nextคำสั่งอ่านบรรทัดถัดไปซึ่งจะมีการพิมพ์แล้วถ้ามีการตั้งค่าสีพื้น

awk '{
if (primed) print $4; 
if ($1 == "*aaa") { primed=1; next } primed=0; }' file

ฉันจะแทนที่คำสั่งถัดไปได้อย่างไรหากฉันกำลังมองหาค่าจากไม่ใช่บรรทัดถัดไป แต่จะเป็น +1 ถัดไปหรือบรรทัดก่อนหน้า
ลูคัส

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