ค้นหาเว็บไซต์

เรียนรู้วิธีใช้ตัวแปรในตัว Awk - ตอนที่ 10


ขณะที่เราเปิดเผยส่วนต่างๆ ของคุณลักษณะ Awk ในส่วนนี้ของชุดนี้ เราจะอธิบายแนวคิดเกี่ยวกับตัวแปรบิวท์อินใน Awk มีตัวแปรสองประเภทที่คุณสามารถใช้ได้ใน Awk ได้แก่ ตัวแปร ที่ผู้ใช้กำหนด ซึ่งเราได้พูดถึงไปแล้วในส่วนที่ 8 และตัวแปร บิวท์อิน

ตัวแปร บิวท์อิน มีค่าที่กำหนดไว้แล้วใน Awk แต่เราสามารถเปลี่ยนค่าเหล่านั้นได้อย่างระมัดระวัง ตัวแปรบิวท์อินประกอบด้วย:

  1. FILENAME : ชื่อไฟล์อินพุตปัจจุบัน (อย่าเปลี่ยนชื่อตัวแปร)
  2. FR : จำนวนของบรรทัดอินพุตปัจจุบัน (นั่นคือบรรทัดอินพุต 1, 2, 3… เป็นต้น ห้ามเปลี่ยนชื่อตัวแปร)
  3. NF : จำนวนฟิลด์ในบรรทัดอินพุตปัจจุบัน (อย่าเปลี่ยนชื่อตัวแปร)
  4. OFS : ตัวคั่นฟิลด์เอาต์พุต
  5. FS : ตัวคั่นฟิลด์อินพุต
  6. ORS : ตัวคั่นบันทึกเอาต์พุต
  7. 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 แบ่งบรรทัดอินพุตตามลำดับ

มีสองวิธีในการทำเช่นนี้:

  1. วิธีหนึ่งคือการใช้ตัวแปรบิวท์อิน FS
  2. และอย่างที่สองคือการเรียกใช้ตัวเลือก -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 ต่อไป