ວິທີການໃຊ້ Awk ໃນການພິມຟາຍແລະຖັນໃນເອກະສານ


ໃນພາກນີ້ຂອງຊຸດ ຄຳ ສັ່ງ Linux Awk ຂອງພວກເຮົາ, ພວກເຮົາຈະຕ້ອງໄດ້ເບິ່ງທີ່ ໜຶ່ງ ຂອງຄຸນລັກສະນະທີ່ ສຳ ຄັນທີ່ສຸດຂອງ Awk, ເຊິ່ງແມ່ນການດັດແກ້ພາກສະ ໜາມ.

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

ຖ້າທ່ານຄຸ້ນເຄີຍກັບ Unix/Linux ຫຼືເຮັດໂປແກມ bash shell, ທ່ານຄວນຮູ້ວ່າຕົວແຍກຂໍ້ມູນພາຍໃນ (IFS) ແມ່ນຫຍັງ. IFS ເລີ່ມຕົ້ນໃນ Awk ແມ່ນແທັບແລະພື້ນທີ່.

ນີ້ແມ່ນວິທີທີ່ຄວາມຄິດຂອງການແຍກພາກສະ ໜາມ ເຮັດວຽກໃນ Awk: ເມື່ອມັນພົບກັບເສັ້ນປ້ອນຂໍ້ມູນ, ຕາມ IFS ທີ່ໄດ້ ກຳ ນົດໄວ້, ຕົວອັກສອນ ທຳ ອິດແມ່ນພາກສະ ໜາມ ໜຶ່ງ, ເຊິ່ງສາມາດເຂົ້າເຖິງໄດ້ໂດຍໃຊ້ $1, ຊຸດຕົວອັກສອນທີສອງແມ່ນພາກສະ ໜາມ ສອງ, ເຊິ່ງ ສາມາດເຂົ້າເບິ່ງໄດ້ໂດຍໃຊ້ $2, ຊຸດທີສາມຂອງຕົວລະຄອນແມ່ນພາກສະ ໜາມ ສາມ, ເຊິ່ງສາມາດເຂົ້າເຖິງໄດ້ໂດຍໃຊ້ $3 ແລະອື່ນໆຈົນເຖິງຊຸດຂອງຕົວອັກສອນສຸດທ້າຍ.

ເພື່ອເຂົ້າໃຈການດັດແກ້ພາກສະ ໜາມ Awk ທີ່ດີກວ່ານີ້, ພວກເຮົາມາເບິ່ງຕົວຢ່າງຂ້າງລຸ່ມນີ້:

ຕົວຢ່າງ 1: ຂ້ອຍໄດ້ສ້າງເອກະສານຂໍ້ຄວາມທີ່ມີຊື່ວ່າ tecmintinfo.txt.

# vi tecmintinfo.txt
# cat tecmintinfo.txt

ຈາກເສັ້ນ ຄຳ ສັ່ງຂ້ອຍພະຍາຍາມພິມ ໜ້າ ທຳ ອິດ, ທີສອງແລະທີສາມຈາກແຟ້ມເອກະສານ tecmintinfo.txt ໂດຍໃຊ້ ຄຳ ສັ່ງດ້ານລຸ່ມ:

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt

TecMint.comisthe

ຈາກຜົນໄດ້ຮັບຂ້າງເທິງ, ທ່ານສາມາດເຫັນໄດ້ວ່າຕົວອັກສອນຈາກສາມຂົງເຂດ ທຳ ອິດຖືກພິມໂດຍອີງໃສ່ IFS ທີ່ໄດ້ ກຳ ນົດວ່າແມ່ນຊ່ອງໃດ:

<

  • ພາກສະ ໜາມ ທີ່“ TecMint.com” ເຂົ້າເຖິງໂດຍໃຊ້ $1 .
  • ພາກສະ ໜາມ ສອງບ່ອນທີ່“ ແມ່ນ” ເຂົ້າໄປໃຊ້ໂດຍໃຊ້ລະຫັດ $2 .
  • ພາກສະ ໜາມ ສາມບ່ອນທີ່“ the” ເຂົ້າເຖິງໂດຍໃຊ້ $3 .
  • ຖ້າທ່ານໄດ້ສັງເກດເຫັນໃນຜົນຜະລິດທີ່ພິມແລ້ວ, ຄ່າຂອງພາກສະ ໜາມ ບໍ່ໄດ້ຖືກແຍກອອກຈາກກັນແລະນີ້ແມ່ນວິທີການພິມແບບ ທຳ ມະດາ.

    ເພື່ອເບິ່ງຜົນໄດ້ຮັບຢ່າງຈະແຈ້ງແລະມີຊ່ອງຫວ່າງລະຫວ່າງຄ່າຂອງພາກສະ ໜາມ, ທ່ານ ຈຳ ເປັນຕ້ອງເພີ່ມຕົວປະຕິບັດການ (,) ດັ່ງຕໍ່ໄປນີ້:

    $ awk '//{print $1, $2, $3; }' tecmintinfo.txt
    
    TecMint.com is the
    

    ສິ່ງ ສຳ ຄັນ ໜຶ່ງ ທີ່ຄວນສັງເກດແລະ ຈຳ ໄວ້ສະ ເໝີ ແມ່ນການ ນຳ ໃຊ້ ($) ໃນ Awk ແມ່ນແຕກຕ່າງຈາກການ ນຳ ໃຊ້ໃນການຂຽນແກະ.

    ພາຍໃຕ້ສະຄິບແກະ ($) ຖືກໃຊ້ເພື່ອເຂົ້າເຖິງມູນຄ່າຂອງຕົວປ່ຽນຕ່າງໆໃນຂະນະທີ່ຢູ່ໃນ Awk ($) ມັນຖືກໃຊ້ໃນເວລາເຂົ້າເຖິງເນື້ອໃນຂອງຂໍ້ມູນແຕ່ບໍ່ແມ່ນ ສຳ ລັບການເຂົ້າເຖິງ ມູນຄ່າຂອງຕົວແປ.

    ຕົວຢ່າງທີ 2: ໃຫ້ພວກເຮົາພິຈາລະນາອີກຕົວຢ່າງ ໜຶ່ງ ໂດຍໃຊ້ແຟ້ມເອກະສານທີ່ປະກອບມີຫລາຍສາຍທີ່ເອີ້ນວ່າ my_shoping.list.

    No	Item_Name		Unit_Price	Quantity	Price
    1	Mouse			#20,000		   1		#20,000
    2 	Monitor			#500,000	   1		#500,000
    3	RAM_Chips		#150,000	   2		#300,000
    4	Ethernet_Cables	        #30,000		   4		#120,000		
    

    ບອກວ່າທ່ານຕ້ອງການພິມພຽງແຕ່ Unit_Price ຂອງແຕ່ລະລາຍການທີ່ຢູ່ໃນລາຍການຊື້ເຄື່ອງ, ທ່ານຈະຕ້ອງ ດຳ ເນີນການ ຄຳ ສັ່ງດັ່ງລຸ່ມນີ້:

    $ awk '//{print $2, $3 }' my_shopping.txt 
    
    Item_Name Unit_Price
    Mouse #20,000
    Monitor #500,000
    RAM_Chips #150,000
    Ethernet_Cables #30,000
    

    Awk ຍັງມີ ຄຳ ສັ່ງ printf ທີ່ຊ່ວຍໃຫ້ທ່ານສາມາດຈັດຮູບແບບຜົນຜະລິດຂອງທ່ານໄດ້ເປັນວິທີທີ່ດີຍ້ອນວ່າທ່ານສາມາດເຫັນຜົນໄດ້ຮັບຂ້າງເທິງບໍ່ຈະແຈ້ງ.

    ການໃຊ້ printf ເພື່ອຈັດຮູບແບບຂອງ Item_Name ແລະ Unit_Price:

    $ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt 
    
    Item_Name  Unit_Price
    Mouse      #20,000
    Monitor    #500,000
    RAM_Chips  #150,000
    Ethernet_Cables #30,000
    

    ບົດສະຫຼຸບ

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

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