AWK NF คืออะไร?

Awk Nf Khux Xari



ภาษาสคริปต์ AWK ยังมีชุดของตัวแปรพิเศษในตัวเพื่อตอบสนองวัตถุประสงค์ที่กำหนดไว้ล่วงหน้า ตัวแปรบิวท์อินหนึ่งตัวคือ “NF” ซึ่งมีฟังก์ชันการทำงานที่กำหนดไว้ล่วงหน้า บทความนี้จะสำรวจวัตถุประสงค์ของตัวแปร AWK ในตัวนี้โดยแสดงตัวอย่างที่เกี่ยวข้องใน Ubuntu 20.04

AWK NF ใน Ubuntu 20.04:

ตัวแปร AWK “NF” ใช้เพื่อพิมพ์จำนวนฟิลด์ในทุกบรรทัดของไฟล์ที่ให้มา ตัวแปรในตัวนี้จะวนซ้ำทุกบรรทัดของไฟล์ทีละบรรทัด และพิมพ์จำนวนฟิลด์แยกกันสำหรับแต่ละบรรทัด เพื่อให้เข้าใจฟังก์ชันนี้เป็นอย่างดี คุณจะต้องอ่านตัวอย่างที่กล่าวถึงด้านล่างนี้

ตัวอย่างการสาธิตการใช้งาน AWK NF ใน Ubuntu 20.04:

สี่ตัวอย่างต่อไปนี้ได้รับการออกแบบเพื่อสอนการใช้งาน AWK NF ด้วยวิธีที่เข้าใจง่าย ตัวอย่างทั้งหมดนี้ใช้งานบนระบบปฏิบัติการ Ubuntu 20.04







ตัวอย่าง # 1: พิมพ์จำนวนฟิลด์จากแต่ละบรรทัดของไฟล์ข้อความ:

ในตัวอย่างนี้ เราต้องการพิมพ์จำนวนฟิลด์หรือคอลัมน์ของแต่ละบรรทัดหรือแถวหรือบันทึกของไฟล์ข้อความใน Ubuntu 20.04 เพื่อแสดงวิธีการดังกล่าว เราได้สร้างไฟล์ข้อความที่แสดงไว้ในภาพด้านล่าง ไฟล์ข้อความนี้ประกอบด้วยอัตราของแอปเปิ้ลต่อกิโลกรัมจากห้าเมืองที่แตกต่างกันของปากีสถาน





เมื่อเราสร้างไฟล์ข้อความตัวอย่างนี้แล้ว เราดำเนินการคำสั่งต่อไปนี้เพื่อพิมพ์จำนวนฟิลด์จากแต่ละบรรทัดของไฟล์ข้อความนี้ในเทอร์มินัลของเรา:





$ อึดอัด ' { พิมพ์ NF } ’ AppleRates.txt

ในคำสั่งนี้ เรามีคีย์เวิร์ด 'awk' ที่แสดงว่าเราเรียกใช้คำสั่ง AWK ตามด้วยคำสั่ง 'print NF' ซึ่งจะวนซ้ำในแต่ละบรรทัดของไฟล์ข้อความเป้าหมาย และจะพิมพ์จำนวนฟิลด์แยกกันสำหรับแต่ละบรรทัด บรรทัดของไฟล์ข้อความ สุดท้าย เรามีชื่อไฟล์ข้อความนั้น (ซึ่งช่องที่ต้องนับ) ซึ่งในกรณีของเราคือ “AppleRatest.txt”



เนื่องจากเรามีจำนวนฟิลด์เท่ากันทุกประการสำหรับทั้งห้าบรรทัดของไฟล์ข้อความ นั่นคือ 2 หมายเลขเดียวกันจะถูกพิมพ์เป็นจำนวนฟิลด์สำหรับบรรทัดไฟล์ข้อความทั้งหมดเนื่องจากการรันคำสั่งนี้ สามารถดูได้จากภาพด้านล่าง:

ตัวอย่าง # 2: พิมพ์จำนวนฟิลด์จากแต่ละบรรทัดของไฟล์ข้อความในลักษณะที่นำเสนอได้:

เอาต์พุตที่แสดงในตัวอย่างที่กล่าวถึงข้างต้นยังสามารถนำเสนออย่างสวยงามด้วยการแสดงหมายเลขบรรทัดและจำนวนฟิลด์ของแต่ละบรรทัดของไฟล์ข้อความ นอกจากนี้ เรายังสามารถแยกหมายเลขบรรทัดออกจากจำนวนฟิลด์ได้ด้วยอักขระพิเศษที่เราเลือก เราจะใช้ไฟล์ข้อความเดียวกันกับที่เราใช้ในตัวอย่างแรกเพื่อแสดงให้คุณเห็น อย่างไรก็ตาม คำสั่งของเราที่จะดำเนินการในกรณีนี้จะแตกต่างกันเล็กน้อย และมีดังนี้:

$ อึดอัด ' { พิมพ์ NR, “---”, NF } ’ AppleRates.txt

ในคำสั่งนี้ เราได้แนะนำตัวแปร AWK ในตัว “NR” ซึ่งจะพิมพ์หมายเลขบรรทัดของทุกบรรทัดของไฟล์ข้อความเป้าหมายของเรา นอกจากนี้ เราได้ใช้เครื่องหมายขีดกลางสามขีด “—” เป็นอักขระพิเศษเพื่อแยกหมายเลขบรรทัดออกจากจำนวนฟิลด์ของไฟล์ข้อความที่เราให้มา

ผลลัพธ์ที่แก้ไขเล็กน้อยของไฟล์ข้อความเดียวกันนี้แสดงอยู่ในภาพด้านล่าง:

ตัวอย่าง # 3: พิมพ์ฟิลด์แรกและฟิลด์สุดท้ายจากแต่ละบรรทัดของไฟล์ข้อความ:

นอกเหนือจากการนับจำนวนฟิลด์ของทุกบรรทัดของไฟล์ข้อความที่ให้มา ตัวแปรพิเศษ “NF” ของ AWK ยังสามารถใช้เพื่อแยกค่าจริงของฟิลด์สุดท้ายจากไฟล์ข้อความที่ให้มา อีกครั้ง เราใช้ไฟล์ข้อความเดียวกันกับที่เราใช้กับสองตัวอย่างแรกของเรา อย่างไรก็ตาม เราต้องการพิมพ์ค่าจริงของฟิลด์แรกและฟิลด์สุดท้ายของไฟล์ข้อความในตัวอย่างนี้ เราดำเนินการคำสั่งต่อไปนี้:

$ อึดอัด ' { พิมพ์ 1 ดอลลาร์ , $NF } ’ AppleRates.txt

คีย์เวิร์ด “awk” ตามด้วยคำสั่ง “print $1, $NF” ในคำสั่งนี้ มีการใช้ตัวแปรพิเศษ “$1” เพื่อพิมพ์ค่าของฟิลด์แรกหรือคอลัมน์แรกของไฟล์ข้อความที่เราจัดเตรียมไว้ ในขณะที่ตัวแปร AWK “$NF” ถูกใช้เพื่อพิมพ์ค่าของฟิลด์สุดท้ายหรือคอลัมน์สุดท้าย ของไฟล์ข้อความเป้าหมายของเรา คุณต้องสังเกตตรงนี้ว่าเมื่อเราใช้ตัวแปร AWK “NF” ตามที่เป็นอยู่ มันจะใช้เพื่อนับจำนวนฟิลด์ของแต่ละบรรทัด อย่างไรก็ตาม เมื่อใช้สัญลักษณ์ดอลลาร์ “$” ก็จะดึงค่าจริงจากฟิลด์สุดท้ายของไฟล์ข้อความที่ให้มา คำสั่งที่เหลือจะเหมือนกับคำสั่งที่ใช้ในสองตัวอย่างแรกไม่มากก็น้อย

ในเอาต์พุตที่แสดงด้านล่าง คุณจะเห็นว่าค่าจริงจากฟิลด์แรกและฟิลด์สุดท้ายของไฟล์ข้อความที่เราจัดเตรียมไว้นั้นพิมพ์บนเทอร์มินัลแล้ว คุณจะเห็นว่าเอาต์พุตนี้ค่อนข้างคล้ายกับเอาต์พุตของคำสั่ง 'cat' เพียงเพราะเรามีเพียงสองฟิลด์ในไฟล์ข้อความที่เราให้มา ดังนั้น ในทางใดทางหนึ่ง เนื้อหาของไฟล์ข้อความทั้งหมดของเราจึงถูกพิมพ์บนเทอร์มินัลอันเป็นผลมาจากการดำเนินการคำสั่งที่กล่าวถึงข้างต้น

ตัวอย่าง # 4: แยกบันทึกด้วยฟิลด์ที่ขาดหายไปในไฟล์ข้อความ:

ในบางครั้ง มีบางเรคคอร์ดในไฟล์ข้อความที่มีฟิลด์บางฟิลด์ขาดหายไป และคุณอาจต้องการแยกเรคคอร์ดเหล่านั้นออกจากเรคคอร์ดที่เสร็จสมบูรณ์ในทุกด้าน ซึ่งสามารถทำได้โดยใช้ตัวแปร AWK “NF” เพื่อสิ่งนั้น เราได้สร้างไฟล์ข้อความชื่อ “ExamMarks.txt” ที่มีคะแนนสอบของนักเรียนห้าคนที่แตกต่างกันในการสอบสามชุดพร้อมกับชื่อของพวกเขา อย่างไรก็ตาม สำหรับการสอบครั้งที่ 3 นักเรียนบางคนขาดเรียนเพราะคะแนนขาดหายไป ไฟล์ข้อความนี้เป็นดังนี้:

เพื่อแยกแยะเรกคอร์ดที่มีฟิลด์ขาดหายไปจากเรกคอร์ดที่มีฟิลด์สมบูรณ์ เราจะใช้คำสั่งที่แสดงด้านล่าง:

$ อึดอัด ' { พิมพ์ NR, “--- > ', เอ็นเอฟ } ’ ExamMarks.txt

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

บทสรุป:

บทความนี้มีวัตถุประสงค์เพื่ออธิบายการใช้ตัวแปรพิเศษ AWK “NF” ก่อนอื่นเราได้พูดคุยกันสั้น ๆ ว่าตัวแปรนี้ทำงานอย่างไร และหลังจากนั้น เราได้อธิบายแนวคิดนี้อย่างละเอียดด้วยความช่วยเหลือจากตัวอย่างที่แตกต่างกันสี่ตัวอย่าง เมื่อคุณเข้าใจตัวอย่างที่ใช้ร่วมกันทั้งหมดดีแล้ว คุณจะสามารถใช้ตัวแปร AWK “NF” เพื่อนับจำนวนฟิลด์ทั้งหมดและพิมพ์ค่าจริงของฟิลด์สุดท้ายของไฟล์ที่ให้มา