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