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ē:

  1. mainīgā_nosaukums : ir nosaukums, kuru piešķirat mainīgajam
  2. 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:

  1. * : reizināšanas operators
  2. + : pievienošanas operators
  3. /: dalīšanas operators
  4. - : atņemšanas operators
  5. % : moduļa operators
  6. ^: 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:

  1. * = : reizināšanas piešķiršanas operators
  2. + = : pievienošanas piešķiršanas operators
  3. /= : sadalījuma piešķiršanas operators
  4. - = : atņemšanas piešķiršanas operators
  5. % = : moduļa piešķiršanas operators
  6. ^= : 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.