สมมติว่าคุณต้องการแทนที่บรรทัด 4 ด้วยข้อความ "แตกต่าง" คุณสามารถใช้ AWK ดังนี้:
awk '{ if (NR == 4) print "different"; else print $0}' input_file.txt > output_file.txt
AWK พิจารณาว่าข้อมูลที่ป้อนเป็น "บันทึก" แบ่งออกเป็น "ช่อง" โดยค่าเริ่มต้นหนึ่งบรรทัดคือหนึ่งระเบียน NR
คือจำนวนเรคคอร์ดที่เห็น $0
แสดงถึงระเบียนที่สมบูรณ์ปัจจุบัน (ในขณะที่$1
เป็นเขตข้อมูลแรกจากระเบียนและอื่น ๆ โดยค่าเริ่มต้นเขตข้อมูลเป็นคำจากบรรทัด)
ดังนั้นหากหมายเลขบรรทัดปัจจุบันคือ 4 ให้พิมพ์สตริง "different" แต่ไม่เช่นนั้นให้พิมพ์บรรทัดที่ไม่เปลี่ยนแปลง
ใน AWK รหัสโปรแกรมที่ล้อมรอบ{ }
จะทำงานหนึ่งครั้งในแต่ละระเบียนข้อมูล
คุณจำเป็นต้องพูดโปรแกรม AWK $0
ในคำพูดเดียวที่จะทำให้เปลือกจากความพยายามในการตีความสิ่งที่ต้องการ
แก้ไข: โปรแกรม AWK ที่สั้นและสวยงามกว่าจาก @chepner ตามความคิดเห็นด้านล่าง:
awk 'NR==4 {$0="different"} { print }' input_file.txt
เฉพาะระเบียน (เช่นบรรทัด) หมายเลข 4 แทนที่ระเบียนทั้งหมดด้วยสตริง "แตกต่าง" จากนั้นสำหรับทุกอินพุตอินพุตให้พิมพ์เร็กคอร์ด
เห็นได้ชัดว่าทักษะ AWK ของฉันเต็มไปด้วยสนิม! ขอบคุณ @chepner
แก้ไข: และดูรุ่นสั้นยิ่งขึ้นจาก @Dennis Williamson:
awk 'NR==4 {$0="different"} 1' input_file.txt
วิธีการทำงานนี้อธิบายไว้ในความคิดเห็น: การ1
ประเมินผลจริงเสมอดังนั้นบล็อกโค้ดที่เกี่ยวข้องจะทำงานอยู่เสมอ แต่ไม่มีการบล็อกรหัสที่เกี่ยวข้องซึ่งหมายความว่า AWK ทำการกระทำเริ่มต้นเพียงพิมพ์ทั้งบรรทัด AWK ถูกออกแบบมาเพื่ออนุญาตโปรแกรมสั้น ๆ เช่นนี้