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

วิธีใช้คำสั่ง Flow Control ใน Awk - ตอนที่ 12


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

มีคำสั่งควบคุมการไหลต่างๆ ในการเขียนโปรแกรม Awk และรวมถึง:

  1. คำสั่ง if-else
  2. สำหรับคำสั่ง
  3. ในขณะที่คำสั่ง
  4. คำสั่ง do- while
  5. คำสั่งแบ่ง
  6. ดำเนินการคำสั่งต่อไป
  7. คำสั่งถัดไป
  8. คำสั่งไฟล์ถัดไป
  9. คำสั่งออก

อย่างไรก็ตาม สำหรับขอบเขตของซีรี่ส์นี้ เราจะอธิบายเกี่ยวกับ: if-else, for, While และ do while คำสั่ง โปรดจำไว้ว่าเราได้อธิบายวิธีใช้คำสั่งถัดไปไปแล้วในตอนที่ 6 ของซีรีส์ Awk นี้

1. คำสั่ง if-else

ไวยากรณ์ที่คาดหวังของ คำสั่ง if คล้ายกับของเชลล์ คำสั่ง if:

if  (condition1) {
     actions1
}
else {
      actions2
}

ในรูปแบบข้างต้น condition1 และ condition2 เป็นนิพจน์ Awk และ actions1 และ actions2 เป็นคำสั่ง Awk ที่ถูกดำเนินการเมื่อ เป็นไปตามเงื่อนไขที่เกี่ยวข้อง

เมื่อ เงื่อนไข1 เป็นไปตามนั้น หมายความว่าเป็นจริง จากนั้น actions1 จะถูกดำเนินการ และ คำสั่ง if จะออก มิฉะนั้น actions2 จะเป็น ดำเนินการ

คำสั่ง if ยังสามารถขยายเป็นคำสั่ง if-else_if-else ได้ดังต่อไปนี้:

if (condition1){
     actions1
}
else if (conditions2){
      actions2
}
else{
     actions3
}

สำหรับแบบฟอร์มด้านบน หาก เงื่อนไข1 เป็นจริง ระบบจะดำเนินการ actions1 และ คำสั่ง if จะออก มิฉะนั้น เงื่อนไข2 ได้รับการประเมิน และหากเป็นจริง ระบบจะดำเนินการ actions2 และคำสั่ง if จะออก อย่างไรก็ตาม เมื่อ เงื่อนไข2 เป็นเท็จ ดังนั้น actions3 จะถูกดำเนินการ และคำสั่ง if จะออก

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

เราต้องการพิมพ์ข้อความที่ระบุชื่อผู้ใช้และดูว่าอายุของผู้ใช้น้อยกว่าหรือมากกว่า 25 ปีหรือไม่

aaronkilik@tecMint ~ $ cat users.txt
Sarah L			35    	F
Aaron Kili		40    	M
John  Doo		20    	M
Kili  Seth		49    	M    

เราสามารถเขียนเชลล์สคริปต์สั้นเพื่อดำเนินงานของเราด้านบนได้ นี่คือเนื้อหาของสคริปต์:


#!/bin/bash
awk ' { 
        if ( $3 <= 25 ){
           print "User",$1,$2,"is less than 25 years old." ;
        }
        else {
           print "User",$1,$2,"is more than 25 years old" ; 
}
}'    ~/users.txt

จากนั้นบันทึกไฟล์และออก ทำให้สคริปต์ปฏิบัติการได้และรันดังนี้:

chmod +x test.sh
./test.sh
ผลลัพธ์ตัวอย่าง
User Sarah L is more than 25 years old
User Aaron Kili is more than 25 years old
User John Doo is less than 25 years old.
User Kili Seth is more than 25 years old

2. คำชี้แจงสำหรับ

ในกรณีที่คุณต้องการรันคำสั่ง Awk บางคำสั่งในลูป คำสั่ง for จะเสนอวิธีที่เหมาะสมให้คุณดำเนินการดังกล่าว โดยมีไวยากรณ์ด้านล่าง:

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

for ( counter-initialization; test-condition; counter-increment ){
      actions
}

คำสั่ง Awk ต่อไปนี้แสดงวิธีการทำงานของ for คำสั่ง โดยที่เราต้องการพิมพ์ตัวเลข 0-10:

awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
ผลลัพธ์ตัวอย่าง
0
1
2
3
4
5
6
7
8
9
10

3. คำสั่ง while

ไวยากรณ์ทั่วไปของคำสั่ง while เป็นดังนี้:

while ( condition ) {
          actions
}

เงื่อนไขคือนิพจน์ Awk และการดำเนินการคือบรรทัดของคำสั่ง Awk ที่ดำเนินการเมื่อเงื่อนไขเป็นจริง

ด้านล่างนี้เป็นสคริปต์เพื่อแสดงการใช้ คำสั่ง while เพื่อพิมพ์ตัวเลข 0-10:

#!/bin/bash
awk ' BEGIN{ counter=0 ;
         
        while(counter<=10){
              print counter;
              counter+=1 ;
             
}
}  

บันทึกไฟล์และทำให้สคริปต์ทำงานได้ จากนั้นรัน:

chmod +x test.sh
./test.sh
ผลลัพธ์ตัวอย่าง
0
1
2
3
4
5
6
7
8
9
10

4.คำสั่ง do while

เป็นการแก้ไข คำสั่ง while ด้านบน โดยมีไวยากรณ์พื้นฐานดังต่อไปนี้:

do {
     actions
}
 while (condition) 

ข้อแตกต่างเล็กน้อยก็คือ ภายใต้ do while คำสั่ง Awk จะถูกดำเนินการก่อนที่จะประเมินเงื่อนไข จากตัวอย่างภายใต้คำสั่ง while ข้างต้น เราสามารถอธิบายการใช้งาน do while ได้โดยการเปลี่ยนคำสั่ง Awk ในสคริปต์ test.sh เป็น ดังต่อไปนี้:

#!/bin/bash

awk ' BEGIN{ counter=0 ;  
        do{
            print counter;  
            counter+=1 ;    
        }
        while (counter<=10)   
} 
'

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

chmod +x test.sh
./test.sh
ผลลัพธ์ตัวอย่าง
0
1
2
3
4
5
6
7
8
9
10

บทสรุป

นี่ไม่ใช่คำแนะนำที่ครอบคลุมเกี่ยวกับคำสั่งควบคุมโฟลว์ Awk ดังที่ฉันได้กล่าวไว้ก่อนหน้านี้ มี ข้อความควบคุมโฟลว์ อื่นๆ อีกหลายรายการใน Awk

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

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