วิธีใช้คำสั่ง 'next' กับ Awk ใน Linux - ตอนที่ 6
ในส่วนที่หกของซีรีส์ Awk นี้ เราจะดูที่การใช้คำสั่ง next
ซึ่งบอกให้ Awk ให้ข้ามรูปแบบและนิพจน์ที่เหลือทั้งหมดที่คุณระบุไว้ แต่อ่านคำสั่งถัดไปแทน สายอินพุต
คำสั่ง next
ช่วยให้คุณป้องกันการดำเนินการสิ่งที่ฉันเรียกว่าขั้นตอนการเสียเวลาในการดำเนินการคำสั่ง
เพื่อให้เข้าใจถึงวิธีการทำงาน ให้เราพิจารณาไฟล์ชื่อ food_list.txt ที่มีลักษณะดังนี้:
No Item_Name Price Quantity
1 Mangoes $3.45 5
2 Apples $2.45 25
3 Pineapples $4.45 55
4 Tomatoes $3.45 25
5 Onions $1.45 15
6 Bananas $3.45 30
พิจารณาเรียกใช้คำสั่งต่อไปนี้เพื่อทำเครื่องหมายรายการอาหารที่มีปริมาณน้อยกว่าหรือเท่ากับ 20 โดยมีเครื่องหมาย (*)
ที่ท้ายแต่ละบรรทัด:
# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; } $4 > 20 { print $0 ;} ' food_list.txt
No Item_Name Price Quantity
1 Mangoes $3.45 5 *
2 Apples $2.45 25
3 Pineapples $4.45 55
4 Tomatoes $3.45 25
5 Onions $1.45 15 *
6 Bananas $3.45 30
คำสั่งข้างต้นใช้งานได้จริงดังนี้:
- ขั้นแรก จะตรวจสอบว่าปริมาณ ฟิลด์ที่สี่ของแต่ละบรรทัดอินพุตน้อยกว่าหรือเท่ากับ 20 หากค่าตรงตามเงื่อนไขนั้น ระบบจะพิมพ์และทำเครื่องหมายด้วย
(*)
ลงชื่อที่ส่วนท้ายโดยใช้นิพจน์ที่หนึ่ง:$4 <= 20
- ประการที่สอง จะตรวจสอบว่าฟิลด์ที่สี่ของแต่ละบรรทัดอินพุตมากกว่า 20 หรือไม่ และหากบรรทัดตรงตามเงื่อนไขจะถูกพิมพ์โดยใช้นิพจน์ที่สอง:
$4 > 20
แต่มีปัญหาอย่างหนึ่งที่นี่ เมื่อดำเนินการ นิพจน์แรก บรรทัดที่เราต้องการแฟล็กจะถูกพิมพ์โดยใช้: { printf "%s\t%s\n", $0, "**" ; }
จากนั้นในขั้นตอนเดียวกัน นิพจน์ที่สอง จะถูกตรวจสอบด้วย ซึ่งจะกลายเป็นปัจจัยที่เสียเวลา
ดังนั้นจึงไม่จำเป็นต้องดำเนินการนิพจน์ที่สอง $4 > 20
อีกครั้งหลังจากพิมพ์บรรทัดที่ติดธงไว้แล้วซึ่งพิมพ์โดยใช้นิพจน์แรก
เพื่อจัดการกับปัญหานี้ คุณต้องใช้คำสั่ง next
ดังนี้:
# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; next; } $4 > 20 { print $0 ;} ' food_list.txt
No Item_Name Price Quantity
1 Mangoes $3.45 5 *
2 Apples $2.45 25
3 Pineapples $4.45 55
4 Tomatoes $3.45 25
5 Onions $1.45 15 *
6 Bananas $3.45 30
หลังจากพิมพ์บรรทัดอินพุตเดียวโดยใช้ $4 <= 20
{ printf "%s\t%s\n", $0,"*" ; ต่อไป ; }
คำสั่ง ถัดไป
ที่รวมไว้จะช่วยข้ามนิพจน์ที่สอง $4 > 20
{ print $0 ;}
ดังนั้นการดำเนินการจึงไปที่ บรรทัดอินพุตถัดไปโดยไม่ต้องเสียเวลาตรวจสอบว่าปริมาณมากกว่า 20 หรือไม่
คำสั่ง ถัดไป มีความสำคัญมากคือการเขียนคำสั่งที่มีประสิทธิภาพ และเมื่อจำเป็น คุณสามารถใช้เพื่อเพิ่มความเร็วในการเรียกใช้สคริปต์ได้ตลอดเวลา เตรียมพร้อมสำหรับส่วนถัดไปของซีรีส์นี้ ซึ่งเราจะดูการใช้อินพุตมาตรฐาน (STDIN) เป็นอินพุตสำหรับ Awk
หวังว่าคำแนะนำนี้จะเป็นประโยชน์และคุณสามารถเขียนความคิดของคุณเป็นลายลักษณ์อักษรได้เช่นเคยโดยแสดงความคิดเห็นในส่วนความคิดเห็นด้านล่าง