Uzziniet, kā izmantot Awk mainīgos, skaitliskās izteiksmes un piešķiršanas operatorus - 8. daļa
Awk komandu sērija kļūst aizraujoša, un es uzskatu, ka iepriekšējās septiņās daļās mēs iepazināmies ar dažiem Awk pamatiem, kas jums jāapgūst, lai ļautu Linux veikt pamata teksta vai virkņu filtrēšanu.
Sākot ar šo daļu, mēs ienirsim iepriekšējos Awk apgabalos, lai veiktu sarežģītākas teksta vai virkņu filtrēšanas darbības. Tādēļ mēs aplūkosim tādas Awk funkcijas kā mainīgie, skaitliskās izteiksmes un piešķiršanas operatori.
Šie jēdzieni nav visaptveroši atšķirīgi no tiem, ar kuriem jūs, iespējams, esat saskāries daudzās programmēšanas valodās pirms šāda apvalka, C, Python un daudziem citiem, tāpēc par šo tēmu nav jāuztraucas daudz, mēs vienkārši pārskatām izplatītās idejas par šīs minētās funkcijas.
Šī, iespējams, būs viena no visvieglāk saprotamajām Awk komandu sadaļām, tāpēc apsēdieties un ļaujiet iet.
1. Awk mainīgie
Jebkurā programmēšanas valodā mainīgais ir vietas turētājs, kas saglabā vērtību, kad, izveidojot mainīgo programmas failā, faila izpildes laikā atmiņā tiek izveidota vieta, kurā tiks saglabāta mainīgajam norādītā vērtība.
Varat definēt Awk mainīgos tādā pašā veidā, kā definējat čaulas mainīgos šādi:
variable_name=value
Iepriekš sintaksē:
-
mainīgā_nosaukums
: ir nosaukums, kuru piešķirat mainīgajam -
value
: mainīgajā saglabātā vērtība
Apskatīsim dažus piemērus zemāk:
computer_name=”linux-console.net” port_no=”22” email=”[email ” server=”computer_name”
Apskatiet iepriekš minētos vienkāršos piemērus. Pirmajā mainīgā definīcijā vērtība linux-console.net
tiek piešķirta mainīgajam computer_name
.
Turklāt vērtība 22
tiek piešķirta mainīgajam port_no
, ir iespējams arī piešķirt viena mainīgā vērtību citam mainīgajam tāpat kā pēdējā piemērā, kur mēs piešķirām vērtību no computer_name
uz mainīgo serveri.
Ja atceraties, tieši no šīs Awk sērijas 2. daļas, kad mēs apskatījām lauku rediģēšanu, mēs runājām par to, kā Awk sadala ievades rindas laukos un izmanto standarta piekļuves operatoru $
, lai lasītu dažādus laukus, ir parsēti. Varam arī izmantot mainīgos, lai lauku vērtības saglabātu šādi.
first_name=$2 second_name=$3
Iepriekš minētajos piemēros first_name
vērtība ir iestatīta uz otro lauku un second_name
ir iestatīta uz trešo lauku.
Kā piemēru ņemiet vērā failu ar nosaukumu names.txt
, kurā ir lietojumprogrammas lietotāju saraksts, norādot viņu vārdu un uzvārdu, kā arī dzimumu. Izmantojot komandu cat, faila saturu mēs varam apskatīt šādi:
$ cat names.txt
Pēc tam mēs varam izmantot arī mainīgos first_name
un second_name
, lai sarakstā saglabātu pirmā lietotāja vārdus un vārdus, palaižot zemāk esošo komandu Awk:
$ awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt
Apskatīsim arī citu gadījumu, kad, izsniedzot komandu uname -a
savā terminālā, tā izdrukā visu jūsu sistēmas informāciju.
Otrajā laukā ir jūsu resursdatora nosaukums
, tāpēc resursdatora nosaukumu mēs varam saglabāt mainīgajā ar nosaukumu hostname
un izdrukāt, izmantojot Awk šādi:
$ uname -a $ uname -a | awk '{hostname=$2 ; print hostname ; }'
2. Skaitliskās izteiksmes
Programmā Awk ciparu izteiksmes tiek veidotas, izmantojot šādus ciparu operatorus:
-
*
: reizināšanas operators -
+
: pievienošanas operators -
/
: dalīšanas operators -
-
: atņemšanas operators -
%
: moduļa operators -
^
: eksponācijas operators
Skaitlisko izteicienu sintakse ir šāda:
$ operand1 operator operand2
Iepriekš redzamajā veidlapā operands1
un operands2
var būt skaitļi vai mainīgo nosaukumi, un operators
ir jebkurš no iepriekš minētajiem operatoriem.
Tālāk ir sniegti daži piemēri, lai parādītu, kā veidot skaitliskas izteiksmes:
counter=0 num1=5 num2=10 num3=num2-num1 counter=counter+1
Lai saprastu skaitlisko izteicienu izmantošanu Awk, mēs apsvērsim šādu piemēru ar failu domains.txt
, kas satur visus Tecmint piederošos domēnus.
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
Lai skatītu faila saturu, izmantojiet zemāk esošo komandu:
$ cat domains.txt
Ja mēs vēlamies saskaitīt domēna linux-console.net
parādīšanās reižu skaitu failā, mēs varam uzrakstīt vienkāršu skriptu, lai to izdarītu šādi:
#!/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
Pēc skripta izveides saglabājiet to un padariet to izpildāmu, kad palaižam to ar failu domains.txt
kā ievades kodu, mēs iegūstam šādu izvadi:
$ ./script.sh ~/domains.txt
No skripta izejas failā domains.txt
ir 6 rindas, kurās ir linux-console.net
, lai apstiprinātu, ka varat tās manuāli saskaitīt.
3. Uzdevumu operatori
Pēdējā Awk iezīme, kuru mēs aptversim, ir piešķiršanas operatori, Awk ir vairāki piešķiršanas operatori, un tie ietver:
-
* =
: reizināšanas piešķiršanas operators -
+ =
: pievienošanas piešķiršanas operators -
/=
: sadalījuma piešķiršanas operators -
- =
: atņemšanas piešķiršanas operators -
% =
: moduļa piešķiršanas operators -
^=
: eksponences piešķiršanas operators
Piešķiršanas operācijas vienkāršākā sintakse Awk ir šāda:
$ variable_name=variable_name operator operand
Piemēri:
counter=0 counter=counter+1 num=20 num=num-1
Lai saīsinātu piešķiršanas operācijas Awk, varat izmantot iepriekš minētos piešķiršanas operatorus, apsveriet iepriekšējos piemērus, mēs varētu veikt piešķiršanu šādā formā:
variable_name operator=operand
counter=0 counter+=1 num=20 num-=1
Tāpēc mēs varam mainīt komandu Awk čaulas skriptā, kuru tikko rakstījām iepriekš, izmantojot + =
piešķiršanas operatoru šādi:
#!/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
Šajā Awk sērijas segmentā mēs aplūkojām dažas spēcīgas Awk funkcijas, tas ir, mainīgos, skaitlisko izteiksmju veidošanu un piešķiršanas operatoru izmantošanu, kā arī dažas ilustrācijas par to, kā mēs tos faktiski varam izmantot.
Šie jēdzieni neatšķiras no citu programmēšanas valodu jēdzieniem, taču Awk programmēšanā var būt dažas būtiskas atšķirības.
9. daļā aplūkosim vairāk Awk funkciju, kas ir īpaši modeļi: BEGIN
un END
. Līdz tam uzturiet savienojumu ar Tecmint.