คำสั่งไวยากรณ์และตัวอย่าง
คำสั่ง awk เป็นวิธีที่มีประสิทธิภาพในการประมวลผลหรือวิเคราะห์ไฟล์ข้อความโดยเฉพาะอย่างยิ่งไฟล์ข้อมูลที่จัดโดยบรรทัด (แถว) และคอลัมน์
คำสั่ง awk ง่ายสามารถเรียกใช้จาก บรรทัดคำสั่ง งานที่ซับซ้อนมากขึ้นควรเขียนเป็นโปรแกรม awk (เรียกว่าสคริปต์ awk) ไปยังไฟล์
รูปแบบพื้นฐานของคำสั่ง awk มีลักษณะดังนี้:
awk 'pattern {action}' input-file> ไฟล์ที่ส่งออกซึ่งหมายความว่า: ใช้แต่ละบรรทัดของแฟ้มใส่; ถ้าบรรทัดประกอบด้วยรูปแบบใช้การดำเนินการกับบรรทัดและเขียนบรรทัดผลลัพธ์เป็นไฟล์ผลลัพธ์ หากรูปแบบถูกละไว้การดำเนินการจะใช้กับทุกบรรทัด ตัวอย่างเช่น:
awk '{print $ 5}' table1.txt> output1.txtคำสั่งนี้ใช้องค์ประกอบของคอลัมน์ที่ 5 ของแต่ละบรรทัดและเขียนเป็นบรรทัดในไฟล์ที่ส่งออก "output.txt" ตัวแปร '$ 4' หมายถึงคอลัมน์ที่สอง ในทำนองเดียวกันคุณสามารถเข้าถึงคอลัมน์แรกสองและสามโดยมีค่า 1 $ 2 $ 3 เป็นต้นโดยค่าเริ่มต้นคอลัมน์จะถูกคั่นด้วยช่องว่างหรือแท็บ (เรียกว่าช่องว่างสีขาว) ดังนั้นหากไฟล์ input "table1.txt" มีบรรทัดเหล่านี้:
1, จัสตินทิมเบอร์เลค, ชื่อเรื่อง 545, ราคา $ 7.30 2, Taylor Swift, ชื่อเรื่อง 723, ราคา 7.90 เหรียญ 3, Mick Jagger, ชื่อเรื่อง 610, ราคา 7.90 เหรียญ 4, Lady Gaga, ชื่อเรื่อง 118, ราคา 7.30 $ 5, Johnny Cash, Title 482, Price $ 6.50 6, Elvis Presley, Title 335, Price $ 7.30 7, John Lennon, Title 271, ราคา $ 7.90 8, Michael Jackson, ชื่อเรื่อง 373, ราคา 5.50 เหรียญจากนั้นคำสั่งจะเขียนบรรทัดต่อไปนี้ไปยังไฟล์ที่ส่งออก "output1.txt":
545, 723, 610, 118, 482, 335, 271, 373,ถ้าตัวแบ่งคอลัมน์เป็นสิ่งอื่นที่ไม่ใช่ช่องว่างหรือแท็บเช่นเครื่องหมายจุลภาคคุณสามารถระบุได้ว่าในคำสั่ง awk ดังนี้:
awk -F, '{print $ 3}' table1.txt> output1.txtซึ่งจะเลือกองค์ประกอบจากคอลัมน์ 3 ของแต่ละบรรทัดหากคอลัมน์มีการพิจารณาให้คั่นด้วยเครื่องหมายจุลภาค ดังนั้นเอาท์พุทในกรณีนี้จะเป็น:
ชื่อเรื่อง 545 ชื่อเรื่อง 723 ชื่อเรื่อง 610 ชื่อเรื่อง 118 ชื่อเรื่อง 482 ชื่อเรื่อง 335 ชื่อเรื่อง 271 ชื่อเรื่อง 373รายการคำสั่งภายในวงเล็บปีกกา ('{', '}') เรียกว่า block ถ้าคุณใส่นิพจน์เงื่อนไขไว้หน้าบล็อกคำสั่งภายในบล็อกจะถูกเรียกใช้เฉพาะเมื่อเงื่อนไขเป็นจริงเท่านั้น
awk '$ 7 == "\ $ 7.30" {print $ 3}' table1.txtในกรณีนี้เงื่อนไขคือ $ 7 == "\ $ 7.30" ซึ่งหมายความว่าองค์ประกอบที่คอลัมน์ 7 มีค่าเท่ากับ $ 7.30 เครื่องหมายทับขวาที่ด้านหน้าของเครื่องหมายดอลลาร์ถูกใช้เพื่อป้องกันไม่ให้ระบบแปลค่าตัวแปรเป็น 7 เหรียญแทนการใช้เครื่องหมายดอลลาร์แทนตัวอักษร
ดังนั้นคำสั่ง awk นี้จะพิมพ์องค์ประกอบที่คอลัมน์ที่ 3 ของแต่ละบรรทัดที่มี "$ 7.30" ที่คอลัมน์ 7
นอกจากนี้คุณยังสามารถใช้ นิพจน์ปกติ เป็นเงื่อนไขได้เช่นกัน ตัวอย่างเช่น:
awk '/ 30 / {print $ 3}' table1.txtสายอักขระระหว่างเครื่องหมายทับสอง ('/') คือนิพจน์ปกติ ในกรณีนี้เป็นเพียงสตริง "30" ซึ่งหมายความว่าถ้าบรรทัดประกอบด้วยสตริง "30" ระบบจะพิมพ์องค์ประกอบที่คอลัมน์ที่ 3 ของบรรทัดนั้น ผลลัพธ์ในตัวอย่างข้างต้นจะเป็น:
ทิมเบอร์เลค, กาก้า, เพรสลีย์,ถ้าองค์ประกอบของตารางเป็นตัวเลข awk สามารถเรียกใช้การคำนวณได้เช่นในตัวอย่างนี้:
awk '{พิมพ์ ($ 2 * $ 3) + $ 7}'นอกเหนือจากตัวแปรที่เข้าถึงองค์ประกอบของแถวปัจจุบัน ($ 1, $ 2, ฯลฯ ) มีตัวแปร $ 0 ซึ่งหมายถึงแถวสมบูรณ์ (บรรทัด) และตัวแปร NF ที่มีจำนวนฟิลด์
นอกจากนี้คุณยังสามารถกำหนดตัวแปรใหม่เช่นในตัวอย่างนี้:
awk '{sum = 0; สำหรับ (col = 1; col <= NF; col ++) sum + = $ col; ผลรวมพิมพ์; }'คำนวณและพิมพ์ผลรวมขององค์ประกอบทั้งหมดของแต่ละแถว
คำสั่ง Awk จะรวมกันบ่อยๆกับ คำสั่ง sed