ວິທີການ ນຳ ໃຊ້ສະຖິຕິຄວບຄຸມການໄຫຼເຂົ້າໃນ Awk - ພາກ 12


ເມື່ອທ່ານທົບທວນຄືນຕົວຢ່າງ Awk ທັງ ໝົດ ທີ່ພວກເຮົາໄດ້ກວມເອົາມາຮອດປະຈຸບັນ, ຕັ້ງແຕ່ເລີ່ມຕົ້ນການ ດຳ ເນີນງານການກັ່ນຕອງຂໍ້ຄວາມໂດຍອີງໃສ່ບາງເງື່ອນໄຂ, ນັ້ນແມ່ນບ່ອນທີ່ວິທີການຂອງໃບລາຍງານການຄວບຄຸມການໄຫຼເຂົ້າ.

ມີລາຍງານການຄວບຄຸມການໄຫຼວຽນຕ່າງໆໃນການຂຽນໂປແກມ Awk ແລະມັນປະກອບມີ:

<

  • ຖ້າມີ ຄຳ ສັ່ງອື່ນ
  • ສຳ ລັບ ຄຳ ຖະແຫຼງ
  • ໃນຂະນະທີ່ຖະແຫຼງການ
  • ເຮັດໃນຂະນະທີ່ຖະແຫຼງການ
  • ຖະແຫຼງການພັກຜ່ອນ
  • ສືບຕໍ່ຖະແຫຼງການ
  • ຄຳ ຖະແຫຼງຕໍ່ໄປ
  • ຄຳ ຖະແຫຼງຕໍ່ໄປ
  • ຖະແຫຼງການອອກ
  • ເຖິງຢ່າງໃດກໍ່ຕາມ, ສຳ ລັບຂອບເຂດຂອງຊຸດນີ້, ພວກເຮົາຈະອະທິບາຍກ່ຽວກັບ: if-else , ສຳ ລັບ , ໃນຂະນະທີ່ ແລະ ເຮັດໃນຂະນະທີ່ < ຖະແຫຼງການ. ຈື່ໄວ້ວ່າພວກເຮົາໄດ້ຍ່າງຜ່ານຊຸດ Awk ແລ້ວ.

    1. ຖະແຫຼງການຖ້າວ່າອີກ

    syntax ທີ່ຄາດໄວ້ຂອງ ຖ້າ ຄຳ ຖະແຫຼງການ ແມ່ນຄ້າຍຄືກັບຫອຍຖ້າມີ ຄຳ ວ່າ:

    if  (condition1) {
         actions1
    }
    else {
          actions2
    }
    

    ໃນ syntax ຂ້າງເທິງ, condition1 ແລະ condition2 ແມ່ນການສະແດງອອກຂອງ Awk, ແລະ action1 ແລະ action2 ແມ່ນ ຄຳ ສັ່ງ Awk ທີ່ຖືກປະຕິບັດເມື່ອ ເງື່ອນໄຂທີ່ກ່ຽວຂ້ອງແມ່ນພໍໃຈ.

    ເມື່ອເງື່ອນໄຂ 1 ມີຄວາມເພິ່ງພໍໃຈ, ໝາຍ ຄວາມວ່າມັນແມ່ນຄວາມຈິງ, ແລ້ວການກະ ທຳ 1 ຈະຖືກປະຕິບັດແລະຖ້າ ຄຳ ຖະແຫຼງອອກ, ຖ້າບໍ່ດັ່ງນັ້ນການກະ ທຳ 2 ຈະຖືກປະຕິບັດ.

    ຖ້າ ຄຳ ຖະແຫຼງການດັ່ງກ່າວຍັງສາມາດຂະຫຍາຍໄປເປັນ if-else_if-else ຖະແຫຼງການດັ່ງລຸ່ມນີ້:

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

    ສຳ ລັບແບບຟອມຂ້າງເທິງ, ຖ້າວ່າເງື່ອນໄຂ 1 ແມ່ນຖືກຕ້ອງ, ຫຼັງຈາກນັ້ນ, ການກະ ທຳ 1 ຈະຖືກປະຕິບັດແລະຖ້າ ຄຳ ຖະແຫຼງອອກ, ຖ້າບໍ່ດັ່ງນັ້ນເງື່ອນໄຂ 2 ຈະຖືກປະເມີນຜົນແລະຖ້າມັນແມ່ນຄວາມຈິງ, ຫຼັງຈາກນັ້ນການກະ ທຳ 2 ຈະຖືກປະຕິບັດແລະຖ້າ ຄຳ ຖະແຫຼງອອກ. ເຖິງຢ່າງໃດກໍ່ຕາມ, ເມື່ອເງື່ອນໄຂ 2 ບໍ່ຖືກຕ້ອງ, ຫຼັງຈາກນັ້ນ, ການປະຕິບັດງານ3ໄດ້ຖືກປະຕິບັດແລະຖ້າ ຄຳ ຖະແຫຼງຈະ ໝົດ ລົງ.

    ນີ້ແມ່ນກໍລະນີ ໜຶ່ງ ໃນການ ນຳ ໃຊ້ຖ້າລາຍງານ, ພວກເຮົາມີລາຍຊື່ຜູ້ໃຊ້ແລະອາຍຸຂອງພວກມັນທີ່ເກັບໄວ້ໃນແຟ້ມເອກະສານ, users.txt.

    ພວກເຮົາຕ້ອງການພິມ ຄຳ ຖະແຫຼງທີ່ຊີ້ບອກຊື່ຜູ້ໃຊ້ແລະບໍ່ວ່າອາຍຸຂອງຜູ້ໃຊ້ຈະ ໜ້ອຍ ກວ່າຫຼືຫຼາຍກວ່າ 25 ປີ.

    [email  ~ $ 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 ໃນວົງຈອນ, ຫຼັງຈາກນັ້ນ ຄຳ ຖະແຫຼງການສະ ເໜີ ໃຫ້ທ່ານມີວິທີການທີ່ ເໝາະ ສົມໃນການເຮັດເຊັ່ນນັ້ນ, ເຊິ່ງມີ syntax ຂ້າງລຸ່ມນີ້:

    ໃນທີ່ນີ້, ວິທີການແມ່ນຖືກ ກຳ ນົດໂດຍການໃຊ້ counter ເພື່ອຄວບຄຸມການປະຕິບັດ loop, ທຳ ອິດທ່ານ ຈຳ ເປັນຕ້ອງເລີ່ມຕົ້ນ counter, ຫຼັງຈາກນັ້ນ ດຳ ເນີນການຕໍ່ກັບສະພາບການທົດສອບ, ຖ້າວ່າມັນແມ່ນຄວາມຈິງ, ປະຕິບັດການກະ ທຳ ແລະສຸດທ້າຍກໍ່ຈະເພີ່ມ counter. ວົງຈອນສິ້ນສຸດລົງໃນເວລາທີ່ວຽກງານຕ້ານການບໍ່ພໍໃຈກັບສະພາບການ.

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

    ຄຳ ສັ່ງ Awk ຕໍ່ໄປນີ້ສະແດງໃຫ້ເຫັນວ່າ ຄຳ ຖະແຫຼງການເຮັດວຽກແນວໃດ, ເຊິ່ງພວກເຮົາຕ້ອງການພິມຕົວເລກ 0-10:

    $ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
    
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    

    3. ຖະແຫຼງການໃນຂະນະທີ່

    syntax ທຳ ມະດາຂອງ ຄຳ ເວົ້າໃນຂະນະທີ່ມີດັ່ງນີ້:

    while ( condition ) {
              actions
    }
    

    ເງື່ອນໄຂແມ່ນການສະແດງອອກຂອງ Awk ແລະການກະ ທຳ ແມ່ນສາຍຂອງ ຄຳ ສັ່ງ Awk ທີ່ຖືກປະຕິບັດເມື່ອເງື່ອນໄຂດັ່ງກ່າວເປັນຄວາມຈິງ.

    ຂ້າງລຸ່ມນີ້ແມ່ນຕົວ ໜັງ ສືເພື່ອສະແດງການໃຊ້ ຄຳ ເວົ້າໃນຂະນະທີ່ພິມ ຈຳ ນວນ 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 {
         actions
    }
     while (condition) 
    

    ຄວາມແຕກຕ່າງເລັກນ້ອຍແມ່ນວ່າ, ໃນຂະນະທີ່ເຮັດໃນຂະນະທີ່ ຄຳ ສັ່ງ Awk ຖືກປະຕິບັດກ່ອນເງື່ອນໄຂຈະຖືກປະເມີນ. ໂດຍໃຊ້ຕົວຢ່າງທີ່ຢູ່ພາຍໃຕ້ໃນຂະນະທີ່ ຄຳ ຖະແຫຼງຂ້າງເທິງ, ພວກເຮົາສາມາດສະແດງໃຫ້ເຫັນການ ນຳ ໃຊ້ເຮັດໃນຂະນະທີ່ປ່ຽນ ຄຳ ສັ່ງ Awk ໃນ script 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.