ວິທີການຂຽນ AWK ຄໍາສັ່ງແລະ Scripts

ຄໍາສັ່ງ, syntax, ແລະຕົວຢ່າງ

ຄໍາສັ່ງ awk ແມ່ນວິທີທີ່ມີປະສິດທິຜົນສໍາລັບການປຸງແຕ່ງຫຼືການວິເຄາະໄຟລ໌ຂໍ້ຄວາມ - ໂດຍສະເພາະ, ໄຟລ໌ຂໍ້ມູນທີ່ຈັດໂດຍສາຍ (ແຖວ) ແລະຄໍລໍາ.

ຄໍາສັ່ງ awk ງ່າຍໆສາມາດໃຊ້ໄດ້ຈາກເສັ້ນ ຄໍາສັ່ງ . ວຽກງານທີ່ສັບສົນຫຼາຍຄວນໄດ້ຮັບການຂຽນເປັນໂຄງການ awk (ທີ່ເອີ້ນວ່າ scripts awk) ກັບໄຟລ໌.

ຮູບແບບພື້ນຖານຂອງຄໍາສັ່ງ awk ຄ້າຍຄືກັບ:

awk 'pattern {action}' input-file> output-file

ນີ້ຫມາຍຄວາມວ່າ: ເອົາແຕ່ລະເສັ້ນຂອງໄຟລ໌ເຂົ້າ; ຖ້າເສັ້ນປະກອບມີຮູບແບບການນໍາໃຊ້ການປະຕິບັດກັບເສັ້ນແລະຂຽນເສັ້ນຜົນໄດ້ຮັບຕໍ່ກັບໄຟລ໌ຜົນຜະລິດ. ຖ້າຮູບແບບດັ່ງກ່າວຖືກຍົກເລີກ, ການປະຕິບັດແມ່ນຖືກນໍາໃຊ້ກັບທຸກເສັ້ນ. ຍົກ​ຕົວ​ຢ່າງ:

awk '{print $ 5}' table1txt> output1txt

ຄໍາສັ່ງນີ້ໃຊ້ອົງປະກອບຂອງຄໍລໍາທີ 5 ຂອງແຕ່ລະເສັ້ນແລະຂຽນວ່າເປັນເສັ້ນໃນໄຟລ໌ຜົນຜະລິດ "output.txt". ຕົວແປ '$ 4' ຫມາຍເຖິງຄໍລໍາທີສອງ. ເຊັ່ນດຽວກັນ, ທ່ານສາມາດເຂົ້າເຖິງຄໍລໍາທໍາອິດ, ທີສອງ, ແລະທີສາມ, ດ້ວຍ $ 1, $ 2, $ 3, etc. ຕາມລໍາດັບຄໍລໍາແມ່ນສົມມຸດວ່າຈະຖືກແຍກອອກໂດຍສະຖານທີ່ຫຼືແຖບ (ທີ່ເອີ້ນວ່າພື້ນທີ່ສີຂາວ). ດັ່ງນັ້ນ, ຖ້າໄຟລ໌ປະກອບ "table1.txt" ມີບັນທັດເຫຼົ່ານີ້:

1, Justin Timberlake, Title 545, Price $ 730 2, Taylor Swift, Title 723, Price $ 7.90 3, Mick Jagger, Title 610, Price $ 7.90 4, Lady Gaga, Title 118, Price $ 7.30 5, Johnny Cash, Title 482, Price $ 6.50 6, Elvis Presley, ຊື່ 335, ລາຄາ 7,30 $ 7, John Lennon, Title 271, ລາຄາ $ 790 8, Michael Jackson, ຊື່ 373, ລາຄາ $ 5.50

ຫຼັງຈາກນັ້ນ, ຄໍາສັ່ງຈະຂຽນເສັ້ນຕໍ່ໄປນີ້ກັບໄຟລ໌ຜົນຜະລິດ "output1.txt":

545,723,610,118,482,335,271,373,

ຖ້າຕົວແຍກຄໍລໍາແມ່ນບາງສິ່ງບາງຢ່າງນອກເຫນືອຈາກສະຖານທີ່ຫຼືແຖບ, ເຊັ່ນ: ຄໍາສັບໃດຫນຶ່ງ, ທ່ານສາມາດລະບຸວ່າຢູ່ໃນຄໍາສັ່ງ awk ດັ່ງຕໍ່ໄປນີ້:

awk-F, '{print $ 3}' table1txt> output1txt

ນີ້ຈະເລືອກເອົາອົງປະກອບຈາກຄໍລໍາ 3 ຂອງແຕ່ລະເສັ້ນຖ້າຄໍລໍາຖືກພິຈາລະນາທີ່ຈະຖືກແຍກໂດຍໂຄຣມ. ດັ່ງນັ້ນຜົນຜະລິດ, ໃນກໍລະນີນີ້, ຈະເປັນ:

Title 545 Title 723 Title 610 Title 118 Title 482 Title 335 Title 271 Title 373

ບັນຊີລາຍຊື່ຂອງຂໍ້ກໍານົດພາຍໃນວົງເລັບ ('{', '}') ຖືກເອີ້ນວ່າບລັອກ. ຖ້າທ່ານໃສ່ຄໍາສະແດງເງື່ອນໄຂຢູ່ທາງຫນ້າຂອງບລັອກ, ຄໍາສັ່ງພາຍໃນບລັອກຈະຖືກປະຕິບັດພຽງແຕ່ຫາກເງື່ອນໄຂເປັນຄວາມຈິງ.

awk '$ 7 == "\ $ 730" {print $ 3}' table1txt

ໃນກໍລະນີນີ້, ເງື່ອນໄຂແມ່ນ $ 7 == "$ 730", ຊຶ່ງຫມາຍຄວາມວ່າອົງປະກອບຢູ່ທີ່ຄໍລໍາ 7 ແມ່ນເທົ່າກັບ $ 7.30. ຮອຍຍິ້ມຢູ່ທາງຫນ້າຂອງປ້າຍເງິນໂດລາຖືກນໍາໃຊ້ເພື່ອປ້ອງກັນບໍ່ໃຫ້ລະບົບການແປຂອງ $ 7 ເປັນຕົວແປແລະແທນທີ່ຈະໃຊ້ສັນຍາເງິນໂດລາຕາມຕົວອັກສອນ.

ດັ່ງນັ້ນປື້ມຕໍານິດັ່ງກ່າວນີ້ພິມເອົາສ່ວນປະກອບທີ່ຢູ່ໃນຄໍລໍາທີ 3 ຂອງແຕ່ລະເສັ້ນທີ່ມີ "$ 7.30" ຢູ່ຄໍລໍາ 7.

ທ່ານຍັງສາມາດໃຊ້ການ ສະແດງອອກ ເປັນ ປົກກະຕິ ເປັນເງື່ອນໄຂ. ຍົກ​ຕົວ​ຢ່າງ:

awk '/ 30 / {print $ 3}' table1txt

ລະບົບຕ່ອງໂສ້ລະຫວ່າງສອງ slashes ('/') ແມ່ນການສະແດງອອກເປັນປົກກະຕິ. ໃນກໍລະນີນີ້, ມັນແມ່ນພຽງແຕ່ຊ່ອຍແນ່ "30. " ນີ້ຫມາຍຄວາມວ່າຖ້າເສັ້ນມີລະຫັດ "30", ລະບົບພິມອອກອົງປະກອບທີ່ຢູ່ໃນຄໍລໍາທີ 3 ຂອງເສັ້ນນັ້ນ. ຜົນຜະລິດໃນຕົວຢ່າງຂ້າງເທິງນີ້ຈະເປັນ:

Timberlake, Gaga, Presley,

ຖ້າອົງປະກອບຕາຕະລາງເປັນຈໍານວນ awk ສາມາດເອີ້ນໃຊ້ການຄິດໄລ່ກ່ຽວກັບພວກມັນໃນຕົວຢ່າງນີ້:

awk '{print ($ 2 * $ 3) + $ 7}'

ນອກເຫນືອຈາກຕົວແປທີ່ເຂົ້າເຖິງອົງປະກອບຂອງແຖວໃນປະຈຸບັນ ($ 1, $ 2, etc. ) ມີຕົວແປ $ 0 ເຊິ່ງຫມາຍເຖິງແຖວສົມບູນແລ້ວແລະຕົວແປ NF ທີ່ຖືເປັນຈໍານວນຂອງຊ່ອງ.

ທ່ານຍັງສາມາດກໍານົດຕົວແປໃຫມ່ໃນຕົວຢ່າງນີ້:

awk '{sum = 0 ສໍາຫລັບ (col = 1 col <= NF col ++) sum + = $ col print sum } '

ນີ້ປະເມີນແລະພິມຜົນລວມຂອງອົງປະກອບທັງຫມົດຂອງແຕ່ລະແຖວ.

ຄໍາສັ່ງ Awk ແມ່ນລວມກັນເລື້ອຍໆກັບ ຄໍາສັ່ງ sed .