คู่มือนี้จะแสดงวิธีใช้คำสั่ง awk ใน Linux พร้อมตัวอย่างที่เป็นประโยชน์ในชีวิตประจำวันมากมาย
AWK เป็นเครื่องมือและภาษาสำหรับค้นหาและจัดการข้อความที่มีอยู่ในระบบปฏิบัติการ Linux
awk คำสั่งและไฟล์ค้นหาภาษาสคริปต์ที่เกี่ยวข้องสำหรับข้อความที่กำหนดโดย รูปแบบ และดำเนินการการกระทำ .ที่เฉพาะเจาะจง บนข้อความที่ตรงกับรูปแบบ
อวก เป็นเครื่องมือที่มีประโยชน์สำหรับการดึงข้อมูลและสร้างรายงานจากไฟล์ข้อความขนาดใหญ่หรือไฟล์ข้อความจำนวนมาก เช่น บันทึกการประมวลผล หรือเอาต์พุตของอุปกรณ์บันทึกข้อมูล เช่น โพรบวัดอุณหภูมิ ซึ่งรวบรวมข้อมูลจำนวนมากในช่วงระยะเวลาหนึ่ง . นอกจากนี้ยังสามารถใช้กับผลลัพธ์จากการสืบค้นฐานข้อมูลได้
ไม่จำเป็นต้องติดตั้ง awk; ควรมีอยู่ในระบบ Linux ของคุณแล้ว
awk ไวยากรณ์
ไวยากรณ์สำหรับการใช้ awk คำสั่งในเทอร์มินัลมีดังนี้:
awk [PROGRAM] [INPUT FILES]
โปรดทราบว่า:
- [โปรแกรม] คือรูปแบบการค้นหาและการดำเนินการ – เป็นโปรแกรมที่คุณต้องการให้ awk ทำงานบนไฟล์ที่ให้มา
- ส่งเป็นไฟล์ข้อความแทนอินไลน์ได้โดยใช้ปุ่ม -f ตัวเลือก
- [INPUT FILES] คือไฟล์ที่คุณต้องการให้ awk ทำงาน โดยอาจเป็นไฟล์หลายไฟล์ที่คั่นด้วยช่องว่าง หรือพาธไปยังไดเร็กทอรี หรือรูปแบบของไฟล์ที่จะจับคู่
- หากไม่มีการระบุไฟล์อินพุต awk จะทำงานบนเอาต์พุตที่ไปป์จากคำสั่งอื่น
ตัวเลือก awk
อ็อพชันต่อไปนี้สามารถใช้ได้กับคำสั่ง awk:
-f โปรแกรมไฟล์ | ข้อความโปรแกรมถูกอ่านจากไฟล์แทนที่จะอ่านจากบรรทัดคำสั่ง ยอมรับตัวเลือก -f หลายตัว |
ค่า -F | ตั้งค่าตัวคั่นฟิลด์ FS เป็นค่า |
-v var=value | กำหนดค่าให้กับตัวแปรโปรแกรม var. |
สำหรับตัวเลือกเฉพาะการใช้งานเพิ่มเติมสำหรับเวอร์ชัน awk ของคุณ คุณสามารถตรวจสอบคู่มือได้โดยเรียกใช้:
man awk
การทำงานของโปรแกรมและตัวแปร
โปรแกรมที่คุณจัดหาให้กับ awk จะกำหนดสิ่งที่ทำกับไฟล์ข้อความที่คุณจัดหาให้ โปรแกรม awk มีรูปแบบดังนี้:
CONDITION { ACTION } CONDITION { ACTION } ...
ที่ไหน สภาพ คือรูปแบบของข้อความให้ตรงกันและ ACTION คือการดำเนินการกับข้อความที่ตรงกัน คุณสามารถมีเงื่อนไขและการดำเนินการได้มากเท่าที่คุณต้องการ
การกระทำ
การดำเนินการที่ให้มาคือคำสั่งที่สามารถรวมการคำนวณ ตัวแปร และฟังก์ชันการเรียก ฟังก์ชันในตัวบางฟังก์ชันมีการใช้งานเฉพาะ ดังนั้นจึงควรตรวจสอบคู่มือของคุณสำหรับสิ่งเหล่านี้
บันทึก
อวก โดยทั่วไปจะถือว่าแต่ละบรรทัดใหม่ในไฟล์ข้อความเป็น บันทึก เว้นแต่จะระบุไว้เป็นอย่างอื่นผ่าน OPTIONS .
ฟิลด์
อวก จะใช้ช่องว่าง (ช่องว่าง แท็บ) เพื่อแสดงถึงช่อง ใน บันทึก เว้นแต่จะระบุไว้เป็นอย่างอื่นผ่าน OPTIONS .
ตัวแปร
อวก มีตัวแปรบิวท์อินมากมายที่คุณสามารถใช้ได้โดยไม่ต้องกำหนดเอง ซึ่งครอบคลุมสถานการณ์ทั่วไปบางประการ:
ตัวแปร | ความหมาย |
---|---|
$0 | แสดงถึงบันทึกทั้งหมด |
$1, $2, $3 … | ตัวแปรฟิลด์ – เก็บข้อความ/ค่าสำหรับฟิลด์ข้อความแต่ละรายการไว้ในบันทึก |
NR / N จำนวน R บันทึก | จำนวนบันทึกอินพุตที่อ่านจากไฟล์ทั้งหมดในปัจจุบัน |
FNR / F ile N จำนวน R บันทึก | จำนวนบันทึกอินพุตปัจจุบันที่อ่านในไฟล์ปัจจุบัน – รีเซ็ตเป็นศูนย์โดยอัตโนมัติทุกครั้งที่เริ่มไฟล์ใหม่ |
NF / ไม่มี จำนวน F ฟิลด์ | จำนวนฟิลด์ในเร็กคอร์ดอินพุตปัจจุบัน – ฟิลด์สุดท้ายในเร็กคอร์ดสามารถอ้างอิงได้โดยใช้ $NF ฟิลด์ที่ 2 ถึงฟิลด์สุดท้ายโดยใช้ $(NF-1) เป็นต้น |
FILENAME | ชื่อของไฟล์อินพุตปัจจุบัน |
FS / F ฟิลด์ S เครื่องแยกกาก | อักขระที่ใช้แยกเขตข้อมูลในระเบียน โดยค่าเริ่มต้นจะรวมอักขระเว้นวรรคและแท็บ |
RS / R บันทึก S เครื่องแยกกาก | อักขระที่ใช้แยกระเบียนในไฟล์ ขึ้นบรรทัดใหม่โดยปริยาย |
OFS / O เอาต์พุต F ฟิลด์ S เครื่องแยกกาก | อักขระที่ใช้แยกฟิลด์ในเอาต์พุต Awk ค่าเริ่มต้นคือช่องว่างเดียว |
ORS / O เอาต์พุต R บันทึก S เครื่องแยกกาก | อักขระที่ใช้แยกฟิลด์ในเอาต์พุต Awk ค่าเริ่มต้นคือขึ้นบรรทัดใหม่ |
OFMT / O เอาต์พุต F หรือม กท | รูปแบบสำหรับเอาต์พุตตัวเลข – รูปแบบเริ่มต้นคือ “%.6g” |
ตัวอย่างการใช้งาน awk
สำหรับตัวอย่างเหล่านี้ เราจะทำงานในไฟล์ข้อความเดียวชื่อ flowers.txt ซึ่งมีข้อความดังต่อไปนี้:
red rose yellow daffodil pink flamingo white rose blue iris white lily red peony yellow orchid purple foxglove
พิมพ์เนื้อหาไฟล์
คำสั่ง awk ต่อไปนี้จะส่งออกเนื้อหาของไฟล์ไปยังเทอร์มินัลโดยใช้ awk print ฟังก์ชัน:
awk '{print}' flowers.txt
พิมพ์จำนวนบันทึก (บรรทัด) ในไฟล์
awk 'END { print NR }' sample.txt
ตัวอย่างนี้จะแสดงผลจำนวนบรรทัดในไฟล์:
9
ค้นหาข้อความในไฟล์โดยใช้นิพจน์ทั่วไป
คำสั่งต่อไปนี้จะแสดงผลบรรทัดในไฟล์ที่อธิบายเฉพาะประเภทของ rose :
awk '/rose/' flowers.txt
โปรดทราบว่า REGEX ไวยากรณ์ (นิพจน์ทั่วไป) ใช้เพื่อกำหนดข้อความที่จะค้นหา
คำสั่งนี้จะส่งออก:
red rose white rose
รีเจ็กซ์เพิ่มเติม
awk '/^p/' flowers.txt
คำสั่งนี้จะส่งออกเฉพาะระเบียนที่ขึ้นต้นด้วย p :
pink flamingo purple foxglove
การใช้ตัวแปรฟิลด์
โดยใช้ ตัวแปรฟิลด์ คุณสามารถส่งออก เฉพาะช่องแรกสำหรับระเบียนที่ขึ้นต้นด้วย p :
awk '/^p/ {print $1;}' flowers.txt
ซึ่งจะส่งออก:
pink purple
กำลังประมวลผลข้อมูลจากโปรแกรมอื่น
คุณสามารถไปป์ เอาต์พุตจากโปรแกรมเชลล์ Linux อื่นๆ ไปยัง awk สำหรับการประมวลผล ตัวอย่างนี้นำผลลัพธ์จาก ls -l คำสั่ง ซึ่งแสดงรายการเนื้อหาของไดเรกทอรีปัจจุบันและส่งคืนเนื้อหาของ 5 ฟิลด์ (ขนาดของไฟล์):
ls -l | awk '{print $5}'
ซึ่งจะแสดงผลเช่น:
3104 3072 224 256
…(ขึ้นอยู่กับจำนวนไฟล์ในไดเร็กทอรีปัจจุบันและขนาดของไฟล์)
การใช้ตัวแปรบิวท์อิน
awk '{print NR "-" $2 }' flowers.txt
คำสั่งนี้จะพิมพ์หมายเลขบันทึกปัจจุบัน (หมายเลขบรรทัดไฟล์) ตามด้วยฟิลด์ที่สอง – ชื่อของดอกไม้:
1-red rose 2-yellow daffodil 3-pink flamingo 4-white rose 5-blue iris 6-white lily 7-red peony 8-yellow orchid 9-purple foxglove
การรวมการกระทำ
เงื่อนไข และ การกระทำ สามารถรวมกันได้โดยใช้ && คำสั่งนี้จะพิมพ์ระเบียนทั้งหมดที่ช่องแรกมีข้อความ red และช่องที่ 2 มี น้อยกว่า 5 ตัวอักษร :
awk '$1 ~ /red/ && length($NF) < 5 { print }' flowers.txt
หมายเหตุ:
- การใช้ $NF เพื่อไปยังช่องที่สองแทนการใช้ $2 – เป็นไปได้เพราะเป็นฟิลด์สุดท้ายและเท่ากับ NF (จำนวนฟิลด์)
- The ความยาว() ฟังก์ชันที่ใช้ในการคำนวณความยาวของสนาม
ดังนั้นจึงส่งกลับระเบียนที่ตรงกันเพียงรายการเดียวจากไฟล์ตัวอย่าง:
red rose
บทสรุป
อวก ถูกรวมเข้ากับ Linux ในระดับสากลด้วยเหตุผลบางประการ – เป็นเครื่องมือหลักสำหรับการค้นหาและประมวลผลข้อความ ซึ่งคุณสามารถใช้เพื่อค้นหารายการบันทึกอย่างรวดเร็วหากมีสิ่งผิดปกติเกิดขึ้นกับระบบของคุณหรือสำหรับการประมวลผลข้อมูลที่บันทึกไว้เพื่อใช้ในการวิจัย
หากคุณเคยพยายามทำอะไรที่มากกว่าการค้นหา/แทนที่ง่ายๆ ในคอลเล็กชันไฟล์ข้อความขนาดใหญ่ คุณจะทราบถึงคุณค่าของความสามารถในการเปลี่ยนหรืออัปเดตข้อความทั้งหมดของคุณแบบเป็นโปรแกรมโดยเฉพาะ โดยไม่ต้องเรียกใช้ คำสั่งค้นหา/แทนที่แต่ละรายการ
ดูเคล็ดลับ Linux อื่นๆ ของเรา!