ຮຽນຮູ້ວິທີການ ນຳ ໃຊ້ຕົວແປ Awk, ການສະແດງອອກເປັນຕົວເລກແລະຜູ້ປະຕິບັດການມອບ ໝາຍ - ພາກ 8
ຊຸດ ຄຳ ສັ່ງ Awk ກຳ ລັງໄດ້ຮັບຄວາມຕື່ນເຕັ້ນຂ້ອຍເຊື່ອວ່າ, ໃນເຈັດພາກສ່ວນທີ່ຜ່ານມາ, ພວກເຮົາໄດ້ຍ່າງຜ່ານບາງພື້ນຖານຂອງ Awk ທີ່ທ່ານຕ້ອງການແມ່ບົດເພື່ອຊ່ວຍໃຫ້ທ່ານສາມາດປະຕິບັດຕົວ ໜັງ ສືຂັ້ນພື້ນຖານຫລືການກັ່ນຕອງສາຍຕ່າງໆໃນ Linux.
ເລີ່ມຕົ້ນຈາກພາກສ່ວນນີ້, ພວກເຮົາຈະຕ້ອງເຂົ້າໄປໃນເຂດລ່ວງ ໜ້າ ຂອງ Awk ເພື່ອຈັດການກັບຂໍ້ຄວາມທີ່ສັບສົນຫຼາຍຫຼືການ ດຳ ເນີນການກັ່ນຕອງ. ສະນັ້ນ, ພວກເຮົາ ກຳ ລັງຈະເວົ້າເຖິງຄຸນລັກສະນະຕ່າງໆຂອງ Awk ເຊັ່ນ: ຕົວແປ, ການສະແດງຕົວເລກແລະຜູ້ປະກອບການທີ່ຖືກມອບ ໝາຍ.
ແນວຄວາມຄິດເຫຼົ່ານີ້ບໍ່ໄດ້ແຕກຕ່າງກັບແນວຄິດທີ່ທ່ານອາດຈະໄດ້ພົບໃນຫລາຍພາສາການຂຽນໂປຼແກຼມກ່ອນທີ່ຫອຍ, C, Python ບວກກັບຫລາຍໆຢ່າງ, ສະນັ້ນບໍ່ ຈຳ ເປັນຕ້ອງກັງວົນຫລາຍກ່ຽວກັບຫົວຂໍ້ນີ້, ພວກເຮົາພຽງແຕ່ປັບປຸງແນວຄວາມຄິດທົ່ວໄປຂອງການ ນຳ ໃຊ້ ລັກສະນະທີ່ກ່າວມານີ້.
ນີ້ອາດຈະແມ່ນ ໜຶ່ງ ໃນພາກສ່ວນ ຄຳ ສັ່ງຂອງ Awk ທີ່ເຂົ້າໃຈງ່າຍທີ່ສຸດ, ສະນັ້ນນັ່ງລົງແລະເຮັດໃຫ້ມັນ ສຳ ເລັດໄປ.
1. ຕົວປ່ຽນແປງ Awk
ໃນພາສາການຂຽນໂປແກຼມໃດກໍ່ຕາມ, ຕົວແປແມ່ນບ່ອນເກັບມ້ຽນທີ່ມີຄ່າ, ເມື່ອທ່ານສ້າງຕົວແປໃນແຟ້ມໂປແກມ, ຍ້ອນວ່າເອກະສານຖືກປະຕິບັດ, ບາງພື້ນທີ່ກໍ່ຖືກສ້າງຂື້ນໃນ ໜ່ວຍ ຄວາມ ຈຳ ເຊິ່ງຈະເກັບຄ່າທີ່ທ່ານ ກຳ ນົດໄວ້ ສຳ ລັບຕົວແປ.
ທ່ານສາມາດ ກຳ ນົດຕົວແປ Awk ໃນແບບດຽວກັນກັບທ່ານ ກຳ ນົດຕົວແປຂອງຫອຍດັ່ງຕໍ່ໄປນີ້:
variable_name=value
ໃນ syntax ຂ້າງເທິງ:
<
variable_name
: ແມ່ນຊື່ທີ່ທ່ານໃຫ້ຕົວປ່ຽນ ມູນຄ່າ
: ມູນຄ່າທີ່ເກັບໄວ້ໃນຕົວປ່ຽນແປງ ໃຫ້ເບິ່ງບາງຕົວຢ່າງຂ້າງລຸ່ມນີ້:
computer_name=”linux-console.net” port_no=”22” email=”[email ” server=”computer_name”
ເບິ່ງທີ່ຕົວຢ່າງງ່າຍໆຂ້າງເທິງນີ້, ໃນ ຄຳ ນິຍາມຕົວແປ ທຳ ອິດ, ຄ່າ linux-console.net
ຖືກ ກຳ ນົດໃຫ້ຕົວປ່ຽນແປງ computer_name
.
ຍິ່ງໄປກວ່ານັ້ນ, ມູນຄ່າ 22
ແມ່ນຖືກມອບ ໝາຍ ໃຫ້ຕົວປ່ຽນສັນຍາລັກ port_no
, ມັນຍັງສາມາດ ກຳ ນົດຄ່າຂອງຕົວແປ ໜຶ່ງ ຕົວກັບຕົວອື່ນອີກເຊັ່ນໃນຕົວຢ່າງສຸດທ້າຍທີ່ພວກເຮົາໄດ້ມອບ ໝາຍ ຄ່າ ຂອງ computer_name
ກັບເຊີຟເວີຕົວແປ.
ຖ້າທ່ານສາມາດຈື່ໄດ້, ຈາກພາກທີ 2 ຂອງຊຸດ Awk ນີ້ແມ່ນພວກເຮົາໄດ້ຂຽນກ່ຽວກັບການດັດແກ້ພາກສະ ໜາມ, ພວກເຮົາໄດ້ເວົ້າກ່ຽວກັບວິທີທີ່ Awk ແບ່ງສາຍເຂົ້າໃນທົ່ງນາແລະ ນຳ ໃຊ້ຜູ້ປະກອບການເຂົ້າພາກສະ ໜາມ ມາດຕະຖານ, $
ເພື່ອອ່ານພາກສະ ໜາມ ທີ່ແຕກຕ່າງກັນທີ່ ໄດ້ຮັບການວິເຄາະ. ພວກເຮົາຍັງສາມາດໃຊ້ຕົວແປຕ່າງໆເພື່ອເກັບຄ່າຂອງທົ່ງນາດັ່ງຕໍ່ໄປນີ້.
first_name=$2 second_name=$3
ໃນຕົວຢ່າງຂ້າງເທິງ, ຄ່າຂອງ first_name
ແມ່ນຖືກ ກຳ ນົດຢູ່ໃນສະ ໜາມ ທີສອງແລະ second_name
ແມ່ນຖືກ ກຳ ນົດໃຫ້ຢູ່ພາກສະ ໜາມ ທີສາມ.
ເປັນຕົວຢ່າງ, ພິຈາລະນາເອກະສານທີ່ໃສ່ຊື່ names.txt
ເຊິ່ງປະກອບດ້ວຍບັນຊີລາຍຊື່ຂອງຜູ້ໃຊ້ຂອງແອັບພລິເຄຊັນທີ່ຊີ້ບອກຊື່ ທຳ ອິດແລະຄັ້ງສຸດທ້າຍຂອງພວກເຂົາບວກກັບເພດ. ໂດຍໃຊ້ ຄຳ ສັ່ງແມວ, ພວກເຮົາສາມາດເບິ່ງເນື້ອໃນຂອງເອກະສານດັ່ງຕໍ່ໄປນີ້:
$ cat names.txt
ຈາກນັ້ນ, ພວກເຮົາຍັງສາມາດໃຊ້ຕົວແປ first_name
ແລະ second_name
ເພື່ອເກັບຊື່ແລະຊື່ທີສອງຂອງຜູ້ໃຊ້ຄົນ ທຳ ອິດໃນບັນຊີດັ່ງເຊັ່ນດຽວກັບການເຮັດ ຄຳ ສັ່ງ Awk ຂ້າງລຸ່ມນີ້:
$ awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt
ຂໍໃຫ້ພວກເຮົາພິຈາລະນາເບິ່ງອີກກໍລະນີ ໜຶ່ງ, ເມື່ອທ່ານອອກ ຄຳ ສັ່ງ ບໍ່ລະບຸຊື່ -a
ຢູ່ປາຍຍອດຂອງທ່ານ, ມັນພິມທຸກຂໍ້ມູນລະບົບຂອງທ່ານ.
ພາກສະຫນາມທີສອງປະກອບມີ hostname
ຂອງທ່ານ, ດັ່ງນັ້ນພວກເຮົາສາມາດເກັບຊື່ໂຮດໃນຕົວແປທີ່ເອີ້ນວ່າ hostname
ແລະພິມມັນໂດຍໃຊ້ Awk ດັ່ງຕໍ່ໄປນີ້:
$ uname -a $ uname -a | awk '{hostname=$2 ; print hostname ; }'
2. ການສະແດງອອກເປັນຕົວເລກ
ໃນ Awk, ການສະແດງອອກເປັນຕົວເລກຖືກສ້າງຂຶ້ນໂດຍໃຊ້ຕົວປະຕິບັດຕົວເລກຕໍ່ໄປນີ້:
<
*
: ຕົວປະຕິບັດການຄູນ +
: ຜູ້ປະກອບການເພີ່ມເຕີມ /
: ຜູ້ປະຕິບັດງານພະແນກ -
: ຕົວປະຕິບັດການຫັກລົບ %
: ຜູ້ປະຕິບັດການແບບໂມເລກຸນ ^
: ຜູ້ປະຕິບັດການເລັ່ງລັດ syntax ສຳ ລັບການສະແດງອອກເປັນຕົວເລກແມ່ນ:
$ operand1 operator operand2
ໃນຮູບແບບຂ້າງເທິງ, ລະຫັດປະຕິບັດການ operand1
ແລະ operand2
ສາມາດເປັນຕົວເລກຫຼືຕົວແປ, ແລະ operator
ແມ່ນຜູ້ປະຕິບັດງານຢູ່ຂ້າງເທິງ.
ຂ້າງລຸ່ມນີ້ແມ່ນຕົວຢ່າງບາງຢ່າງເພື່ອສະແດງວິທີການສ້າງຕົວສະແດງຕົວເລກ:
counter=0 num1=5 num2=10 num3=num2-num1 counter=counter+1
ເພື່ອເຂົ້າໃຈການ ນຳ ໃຊ້ ສຳ ນວນຕົວເລກໃນ Awk, ພວກເຮົາຈະພິຈາລະນາຕົວຢ່າງຕໍ່ໄປນີ້ຂ້າງລຸ່ມນີ້, ໂດຍມີແຟ້ມ domains.txt
ເຊິ່ງປະກອບມີໂດເມນທັງ ໝົດ ທີ່ເປັນເຈົ້າຂອງໂດຍ Tecmint.
news.linux-console.net linux-console.net linuxsay.com windows.linux-console.net linux-console.net news.linux-console.net linux-console.net linuxsay.com linux-console.net news.linux-console.net linux-console.net linuxsay.com windows.linux-console.net linux-console.net
ເພື່ອເບິ່ງເນື້ອໃນຂອງເອກະສານ, ໃຫ້ໃຊ້ ຄຳ ສັ່ງຂ້າງລຸ່ມນີ້:
$ cat domains.txt
ຖ້າພວກເຮົາຕ້ອງການນັບ ຈຳ ນວນຄັ້ງຂອງໂດເມນ linux-console.net
ປາກົດຢູ່ໃນແຟ້ມ, ພວກເຮົາສາມາດຂຽນສະຄິບ ທຳ ມະດາເພື່ອເຮັດສິ່ງດັ່ງຕໍ່ໄປນີ້:
#!/bin/bash for file in [email ; do if [ -f $file ] ; then #print out filename echo "File is: $file" #print a number incrementally for every line containing linux-console.net awk '/^linux-console.net/ { counter=counter+1 ; printf "%s\n", counter ; }' $file else #print error info incase input is not a file echo "$file is not a file, please specify a file." >&2 && exit 1 fi done #terminate script with exit code 0 in case of successful execution exit 0
ຫຼັງຈາກສ້າງສະຄິບແລ້ວ, ບັນທຶກມັນແລະເຮັດໃຫ້ມັນສາມາດໃຊ້ງານໄດ້, ເມື່ອພວກເຮົາໃຊ້ມັນກັບແຟ້ມເອກະສານ, domains.txt
ເປັນການປ້ອນຂໍ້ມູນອອກ, ພວກເຮົາໄດ້ຮັບຜົນຜະລິດຕໍ່ໄປນີ້:
$ ./script.sh ~/domains.txt
ຈາກຜົນໄດ້ຮັບຂອງຕົວອັກສອນ, ມີ 6 ເສັ້ນໃນແຟ້ມເອກະສານ domains.txt
ເຊິ່ງມີ linux-console.net
, ເພື່ອຢືນຢັນວ່າທ່ານສາມາດນັບພວກມັນດ້ວຍຕົນເອງ.
3. ຜູ້ປະກອບການມອບ ໝາຍ
ຄຸນລັກສະນະສຸດທ້າຍຂອງ Awk ທີ່ພວກເຮົາຈະເວົ້າເຖິງແມ່ນຜູ້ປະກອບການມອບ ໝາຍ, ມີຜູ້ປະກອບການມອບ ໝາຍ ຫຼາຍຢ່າງໃນ Awk ແລະສິ່ງເຫຼົ່ານີ້ລວມມີດັ່ງຕໍ່ໄປນີ້:
<
* =
: ຜູ້ປະກອບການມອບ ໝາຍ ຄູນ + =
: ຜູ້ປະກອບການມອບ ໝາຍ ເພີ່ມເຕີມ /=
: ຜູ້ປະກອບການມອບ ໝາຍ ພະແນກ - =
: ຜູ້ປະກອບການມອບ ໝາຍ ການຫັກລົບ % =
: ຜູ້ປະຕິບັດການມອບ ໝາຍ ແບບໂມເລກຸນ ^=
: ຜູ້ປະຕິບັດການມອບ ໝາຍ ແບບເລັ່ງລັດ syntax ທີ່ງ່າຍດາຍທີ່ສຸດຂອງການເຮັດວຽກມອບ ໝາຍ ໃນ Awk ມີດັ່ງນີ້:
$ variable_name=variable_name operator operand
ຕົວຢ່າງ:
counter=0 counter=counter+1 num=20 num=num-1
ທ່ານສາມາດ ນຳ ໃຊ້ຜູ້ປະຕິບັດການມອບ ໝາຍ ທີ່ກ່າວມາຂ້າງເທິງເພື່ອເຮັດໃຫ້ການ ດຳ ເນີນການມອບ ໝາຍ ຢູ່ Awk ສັ້ນລົງ, ພິຈາລະນາຕົວຢ່າງທີ່ຜ່ານມາ, ພວກເຮົາສາມາດປະຕິບັດ ໜ້າ ທີ່ດັ່ງກ່າວໃນຮູບແບບຕໍ່ໄປນີ້:
variable_name operator=operand
counter=0 counter+=1 num=20 num-=1
ດັ່ງນັ້ນ, ພວກເຮົາສາມາດປ່ຽນ ຄຳ ສັ່ງ Awk ໃນ script shell ທີ່ພວກເຮົາພຽງແຕ່ຂຽນມາຂ້າງເທິງໂດຍ ນຳ ໃຊ້ຕົວປະຕິບັດການມອບ ໝາຍ ໃຫ້ + =
ດັ່ງຕໍ່ໄປນີ້:
#!/bin/bash for file in [email ; do if [ -f $file ] ; then #print out filename echo "File is: $file" #print a number incrementally for every line containing linux-console.net awk '/^linux-console.net/ { counter+=1 ; printf "%s\n", counter ; }' $file else #print error info incase input is not a file echo "$file is not a file, please specify a file." >&2 && exit 1 fi done #terminate script with exit code 0 in case of successful execution exit 0
ໃນສ່ວນຂອງຊຸດ Awk ນີ້, ພວກເຮົາໄດ້ກວມເອົາຄຸນລັກສະນະ Awk ທີ່ມີປະສິດທິພາບບາງຢ່າງ, ນັ້ນແມ່ນຕົວແປ, ການສ້າງ ສຳ ນວນຕົວເລກແລະການ ນຳ ໃຊ້ຜູ້ປະກອບການມອບ ໝາຍ, ບວກກັບບາງຮູບພາບທີ່ເຮົາສາມາດ ນຳ ໃຊ້ຕົວຈິງ.
ແນວຄວາມຄິດເຫຼົ່ານີ້ບໍ່ແຕກຕ່າງຈາກແນວຄິດໃນພາສາການຂຽນໂປແກຼມອື່ນແຕ່ມັນອາດຈະມີຄວາມແຕກຕ່າງທີ່ ສຳ ຄັນພາຍໃຕ້ການຂຽນໂປແກຼມ Awk.
ໃນພາກທີ 9, ພວກເຮົາຈະເບິ່ງຫລາຍໆຄຸນລັກສະນະຂອງ Awk ທີ່ມີຮູບແບບພິເສດ: BEGIN
ແລະ END
. ຈົນກ່ວານັ້ນ, ຕິດຕໍ່ກັບ Tecmint.