เรียนรู้วิธีใช้ตัวแปรในตัว Awk - ตอนที่ 10
ขณะที่เราเปิดเผยส่วนต่างๆ ของคุณลักษณะ Awk ในส่วนนี้ของชุดนี้ เราจะอธิบายแนวคิดเกี่ยวกับตัวแปรบิวท์อินใน Awk มีตัวแปรสองประเภทที่คุณสามารถใช้ได้ใน Awk ได้แก่ ตัวแปร ที่ผู้ใช้กำหนด ซึ่งเราได้พูดถึงไปแล้วในส่วนที่ 8 และตัวแปร บิวท์อิน
ตัวแปร บิวท์อิน มีค่าที่กำหนดไว้แล้วใน Awk แต่เราสามารถเปลี่ยนค่าเหล่านั้นได้อย่างระมัดระวัง ตัวแปรบิวท์อินประกอบด้วย:
FILENAME
: ชื่อไฟล์อินพุตปัจจุบัน (อย่าเปลี่ยนชื่อตัวแปร)FR
: จำนวนของบรรทัดอินพุตปัจจุบัน (นั่นคือบรรทัดอินพุต 1, 2, 3… เป็นต้น ห้ามเปลี่ยนชื่อตัวแปร)NF
: จำนวนฟิลด์ในบรรทัดอินพุตปัจจุบัน (อย่าเปลี่ยนชื่อตัวแปร)OFS
: ตัวคั่นฟิลด์เอาต์พุตFS
: ตัวคั่นฟิลด์อินพุตORS
: ตัวคั่นบันทึกเอาต์พุตRS
: ตัวคั่นบันทึกอินพุต
ให้เราอธิบายการใช้ตัวแปรบิวท์อิน Awk บางส่วนด้านบน:
หากต้องการอ่านชื่อไฟล์ของไฟล์อินพุตปัจจุบัน คุณสามารถใช้ตัวแปรในตัว FILENAME
ได้ดังนี้:
awk ' { print FILENAME } ' ~/domains.txt
คุณจะรู้ว่าชื่อไฟล์จะถูกพิมพ์ออกมาสำหรับแต่ละบรรทัดอินพุต ซึ่งเป็นพฤติกรรมเริ่มต้นของ Awk เมื่อคุณใช้ตัวแปรบิวท์อิน FILENAME
การใช้ NR
เพื่อนับจำนวนบรรทัด (บันทึก) ในไฟล์อินพุต โปรดจำไว้ว่ามันจะนับบรรทัดว่างด้วย ดังที่เราจะเห็นในตัวอย่างด้านล่าง
เมื่อเราดูไฟล์ domains.txt โดยใช้คำสั่ง cat ไฟล์จะมี 14 บรรทัดพร้อมข้อความและ 2 บรรทัดว่าง:
cat ~/domains.txt
awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt
ในการนับจำนวนฟิลด์ในบันทึกหรือบรรทัด เราใช้ตัวแปรบิวท์อิน NR ดังนี้:
cat ~/names.txt
awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt
ถัดไป คุณยังสามารถระบุตัวคั่นฟิลด์อินพุตโดยใช้ตัวแปรในตัว FS
ซึ่งจะกำหนดวิธีที่ Awk แบ่งบรรทัดอินพุตออกเป็นฟิลด์
ค่าเริ่มต้นสำหรับ FS
คือ ช่องว่าง และ tab แต่เราสามารถเปลี่ยนค่าของ FS
เป็นอักขระใดๆ ที่ จะสั่งให้ Awk แบ่งบรรทัดอินพุตตามลำดับ
มีสองวิธีในการทำเช่นนี้:
- วิธีหนึ่งคือการใช้ตัวแปรบิวท์อิน FS
- และอย่างที่สองคือการเรียกใช้ตัวเลือก -F Awk
พิจารณาไฟล์ /etc/passwd บนระบบ Linux ฟิลด์ในไฟล์นี้จะถูกแบ่งโดยใช้อักขระ :
ดังนั้นเราจึงสามารถระบุให้เป็นตัวคั่นฟิลด์อินพุตใหม่ได้เมื่อ เราต้องการกรองบางฟิลด์ออกตามตัวอย่างต่อไปนี้:
เราสามารถใช้ตัวเลือก -F
ดังต่อไปนี้:
awk -F':' '{ print $1, $4 ;}' /etc/passwd
อีกทางหนึ่ง เรายังใช้ประโยชน์จากตัวแปรบิวท์อิน FS
ดังต่อไปนี้:
awk ' BEGIN { FS=“:” ; } { print $1, $4 ; } ' /etc/passwd
หากต้องการระบุตัวคั่นฟิลด์เอาท์พุต ให้ใช้ตัวแปรในตัว OFS
ซึ่งจะกำหนดวิธีการแยกฟิลด์เอาท์พุตโดยใช้อักขระที่เราใช้ตามตัวอย่างด้านล่าง:
awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd
ในส่วนที่ 10 นี้ เราได้สำรวจแนวคิดในการใช้ตัวแปรในตัว Awk ซึ่งมาพร้อมกับค่าที่กำหนดไว้ล่วงหน้า แต่เรายังสามารถเปลี่ยนแปลงค่าเหล่านี้ได้ แม้ว่าจะไม่แนะนำให้ทำ เว้นแต่คุณจะรู้ว่าคุณกำลังทำอะไรอยู่และมีความเข้าใจเพียงพอ
หลังจากนี้ เราจะพูดถึงวิธีที่เราสามารถใช้ตัวแปรเชลล์ในการดำเนินการคำสั่ง Awk ดังนั้น ให้เชื่อมต่อกับ Tecmint ต่อไป