ວິທີການໃຊ້ Awk ໃນການກັ່ນຕອງຕົວ ໜັງ ສືຫລືສາຍເຊືອກໂດຍໃຊ້ຮູບແບບການກະ ທຳ ທີ່ແນ່ນອນ


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

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

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

$ cat food_prices.list 
No	Item_Name		Quantity	Price
1	Mangoes			   10		$2.45
2	Apples			   20		$1.50
3	Bananas			   5		$0.90
4	Pineapples		   10		$3.46
5	Oranges			   10		$0.78
6	Tomatoes		   5		$0.55
7	Onions			   5            $0.45

ແລະຫຼັງຈາກນັ້ນ, ທ່ານຕ້ອງການຊີ້ບອກປ້າຍ (*) ໃສ່ລາຍການອາຫານເຊິ່ງລາຄາສູງກວ່າ $2 , ນີ້ສາມາດເຮັດໄດ້ໂດຍການເຮັດ ຄຳ ສັ່ງດັ່ງຕໍ່ໄປນີ້:

$ awk '/ *$[2-9]\.[0-9][0-9] */ { print $1, $2, $3, $4, "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list

ຈາກຜົນໄດ້ຮັບຂ້າງເທິງ, ທ່ານສາມາດເຫັນໄດ້ວ່າມີເຄື່ອງ ໝາຍ (*) ຢູ່ໃນຕອນທ້າຍຂອງສາຍທີ່ມີລາຍການອາຫານ, ໝາກ ມ່ວງແລະ ໝາກ ນັດ. ຖ້າທ່ານກວດເບິ່ງລາຄາຂອງພວກມັນ, ພວກມັນຢູ່ ເໜືອ $2.

ໃນຕົວຢ່າງນີ້, ພວກເຮົາໄດ້ ນຳ ໃຊ້ສອງແບບຄື:

<

  • ທຳ ອິດ: /*\$[2-9] \. [0-9] [0-9] */ ໄດ້ຮັບສາຍທີ່ມີລາຄາອາຫານຫຼາຍກວ່າ $2 ແລະ
  • ວິນາທີທີສອງ: /*\ ກຳ ລັງຊອກຫາສາຍທີ່ມີລາຄາອາຫານຕໍ່າກວ່າ 2 ໂດລາ.
  • >

    ນີ້ແມ່ນສິ່ງທີ່ເກີດຂື້ນ, ມີຢູ່ 4 ຟາຍໃນເອກະສານ, ເມື່ອຮູບແບບ ໜຶ່ງ ພົບເສັ້ນທີ່ມີລາຄາອາຫານສູງກ່ວາ 2 ໂດລາ, ມັນຈະພິມທັງສີ່ດ້ານແລະປ້າຍ (*) ໃນຕອນທ້າຍຂອງ ເສັ້ນເປັນທຸງ.

    ຮູບແບບທີສອງພຽງແຕ່ພິມສາຍອື່ນໆທີ່ມີລາຄາອາຫານຕ່ ຳ ກວ່າ 2 ໂດລາຍ້ອນວ່າມັນປາກົດຢູ່ໃນເອກະສານປະກອບ, food_prices.list.

    ວິທີນີ້ທ່ານສາມາດ ນຳ ໃຊ້ຮູບແບບການກະ ທຳ ທີ່ສະເພາະເຈາະຈົງເພື່ອກັ່ນຕອງລາຍການອາຫານທີ່ມີລາຄາສູງກວ່າ 2 ໂດລາ, ເຖິງວ່າຈະມີປັນຫາກັບຜົນຜະລິດກໍ່ຕາມ, ແຕ່ສາຍທີ່ມີປ້າຍ (*) ບໍ່ໄດ້ຖືກຈັດຮູບແບບຄື ສ່ວນທີ່ເຫຼືອເຮັດໃຫ້ຜົນຜະລິດບໍ່ຈະແຈ້ງພຽງພໍ.

    ພວກເຮົາໄດ້ເຫັນບັນຫາດຽວກັນໃນພາກທີ 2 ຂອງຊຸດຫວາດສຽວ, ແຕ່ພວກເຮົາສາມາດແກ້ໄຂມັນໄດ້ສອງທາງ:

    1. ໃຊ້ ຄຳ ສັ່ງ printf ເຊິ່ງເປັນວິທີທາງທີ່ຍາວແລະ ໜ້າ ເບື່ອໂດຍໃຊ້ ຄຳ ສັ່ງຂ້າງລຸ່ມນີ້:

    $ awk '/ *$[2-9]\.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s\n", $1, $2, $3, $4 "*" ; } / *$[0-1]\.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s\n", $1, $2, $3, $4; }' food_prices.list 
    

    2. ການ ນຳ ໃຊ້ພາກສະ ໜາມ $0. Awk ໃຊ້ຕົວແປ 0 ເພື່ອເກັບສາຍເຂົ້າ. ນີ້ແມ່ນໃຊ້ໄດ້ ສຳ ລັບການແກ້ໄຂບັນຫາຂ້າງເທິງແລະມັນງ່າຍດາຍແລະວ່ອງໄວດັ່ງຕໍ່ໄປນີ້:

    $ awk '/ *$[2-9]\.[0-9][0-9] */ { print $0 "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list 
    

    ສະຫຼຸບ

    ນັ້ນແມ່ນ ສຳ ລັບຕອນນີ້ແລະວິທີການເຫຼົ່ານີ້ແມ່ນວິທີງ່າຍໆຂອງການກັ່ນຕອງຂໍ້ຄວາມໂດຍໃຊ້ຮູບແບບການກະ ທຳ ສະເພາະເຊິ່ງສາມາດຊ່ວຍໃນການ ໝາຍ ແຖວຂອງຂໍ້ຄວາມຫລືສາຍຕ່າງໆໃນແຟ້ມໂດຍໃຊ້ ຄຳ ສັ່ງ Awk.

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