AWK-komento Unixissa/Linuxissa esimerkein

Awk on komentosarjakieli, jota käytetään tietojen käsittelyyn ja raporttien luomiseen. awk-komentoohjelmointikieli ei vaadi kääntämistä ja antaa käyttäjälle mahdollisuuden käyttää muuttujia, numeerisia toimintoja, merkkijonofunktioita ja loogisia operaattoreita.

Awk on apuohjelma, jonka avulla ohjelmoija voi kirjoittaa pieniä, mutta tehokkaita ohjelmia lauseiden muodossa, jotka määrittelevät tekstimalleja, jotka on etsittävä asiakirjan jokaiselta riviltä ja toiminnot, jotka on suoritettava, kun vastaavuus löytyy linja. Awkia käytetään enimmäkseen kuvioiden skannaukseen ja käsittelyyn. Se etsii yhdestä tai useammasta tiedostosta nähdäkseen, sisältävätkö ne rivejä, jotka vastaavat määritettyjä malleja, ja suorittaa sitten niihin liittyvät toiminnot.

Awk on lyhennetty kehittäjien – Aho, Weinberger ja Kernighan – nimistä.

MITÄ VOIMME TEHDÄ AWK:N KANSSA?

1. AWK-toiminnot:
(a) Skannaa tiedoston rivi riviltä
(b) Jakaa jokaisen syöttörivin kenttiin
(c) Vertaa syöttöriviä/kenttiä kuvioon
(d) Suorittaa toimenpiteitä sovitetuilla riveillä

2. Hyödyllinen:
(a) Muunna datatiedostoja
(b) tuottaa muotoiltuja raportteja

3. Ohjelmointirakenteet:
(a) Muotoile lähtölinjat
(b) Aritmeettiset ja merkkijonooperaatiot
(c) Ehdot ja silmukat

Syntaksi:

awk options 'selection _criteria {action }' input-file>output-file 

Vaihtoehdot:

-f program-file : Reads the AWK program source from the file program-file, instead of from the first command line argument. -F fs : Use fs for the input field separator 

Esimerkkikomennot

Esimerkki:

Harkitse seuraavaa tekstitiedostoa syöttötiedostona kaikissa alla olevissa tapauksissa:

$cat>työntekijä.txt>>     

Lähtö:

ajay manager account 45000 sunil clerk account 25000 varun manager sales 50000 amit manager account 47000 tarun peon sales 15000 deepak clerk sales 23000 sunil peon sales 13000 satvik director purchase 80000 

Yllä olevassa esimerkissä kuviota ei anneta. Toiminnot ovat siis sovellettavissa kaikille linjoille. Toimintotulostus ilman argumenttia tulostaa oletuksena koko rivin, joten se tulostaa tiedoston kaikki rivit ilman virhettä.

2. Tulosta viivat, jotka vastaavat annettua kuviota.

$ awk '/manager/ {print}' employee.txt 

Lähtö:

ajay manager account 45000 varun manager sales 50000 amit manager account 47000 

Yllä olevassa esimerkissä awk-komento tulostaa kaikki rivit, jotka vastaavat 'manager' -komentoa.

3. Viivan jakaminen kenttiin: Jokaiselle tietueelle eli riville awk-komento jakaa oletusarvoisesti välilyönnillä rajatun tietueen ja tallentaa sen $n muuttujiin. Jos rivillä on 4 sanaa, se tallennetaan vastaavasti $1, $2, $3 ja $4. Lisäksi $0 edustaa koko riviä.

$ awk '{print $1,$4}' employee.txt 

Lähtö:

ajay 45000 sunil 25000 varun 50000 amit 47000 tarun 15000 deepak 23000 sunil 13000 satvik 80000 

Yllä olevassa esimerkissä $1 ja $4 edustavat Nimi- ja Palkkakenttiä.

Sisäänrakennetut muuttujat awkissa

Awkin sisäänrakennetut muuttujat sisältävät kenttämuuttujia - $1, $2, $3 ja niin edelleen ($0 on koko rivi) - jotka jakavat tekstirivin yksittäisiksi sanoiksi tai kentiksi kutsuttuihin osiin.

    NR: NR-komento pitää syöttötietueiden lukumäärän nykyisen määrän. Muista, että tietueet ovat yleensä rivejä. Awk-komento suorittaa malli-/toimintolausekkeet kerran jokaiselle tiedoston tietueelle. NF: NF-komento pitää kenttien määrän nykyisessä syöttötietueessa. FS: FS-komento sisältää kentän erotinmerkin, jota käytetään jakamaan kentät syöttörivillä. Oletuksena on välilyönti, joka tarkoittaa välilyönti- ja sarkainmerkkejä. FS voidaan määrittää uudelleen toiselle merkille (yleensä kohdassa BEGIN) kentän erottimen muuttamiseksi. RS: RS-komento tallentaa nykyisen tietueen erotinmerkin. Koska oletusarvoisesti syöttörivi on syöttötietue, oletustietueen erotinmerkki on rivinvaihto. OFS: OFS-komento tallentaa tuloskenttäerottimen, joka erottaa kentät, kun Awk tulostaa ne. Oletusarvo on tyhjä tila. Aina kun tulostuksessa on useita pilkuilla erotettuja parametreja, se tulostaa OFS:n arvon kunkin parametrin väliin. ORS: ORS-komento tallentaa tulostietueen erottimen, joka erottaa tulostusrivit, kun Awk tulostaa ne. Oletusarvo on rivinvaihtomerkki. print tulostaa automaattisesti ORS:n sisällön tulostettavaksi annettujen tietojen lopussa.

Esimerkkejä:

Sisäänrakennettujen NR-muuttujien käyttö (näyttörivin numero)

$ awk '{print NR,$0}' employee.txt 

Lähtö:

1 ajay manager account 45000 2 sunil clerk account 25000 3 varun manager sales 50000 4 amit manager account 47000 5 tarun peon sales 15000 6 deepak clerk sales 23000 7 sunil peon sales 13000 8 satvik director purchase 80000 

Yllä olevassa esimerkissä awk-komento, jossa on NR, tulostaa kaikki rivit rivinumeron kanssa.

Sisäisten NF-muuttujien käyttö (Näytä viimeinen kenttä)

$ awk '{print $1,$NF}' employee.txt 

Lähtö:

ajay 45000 sunil 25000 varun 50000 amit 47000 tarun 15000 deepak 23000 sunil 13000 satvik 80000 

Yllä olevassa esimerkissä $1 edustaa nimeä ja $NF edustaa palkkaa. Voimme saada Palkan käyttämällä $NF , jossa $NF edustaa viimeistä kenttää.

Toinen sisäänrakennettujen NR-muuttujien käyttö (Display Line From 3-6)

$ awk 'NR==3, NR==6 {print NR,$0}' employee.txt 

Lähtö:

3 varun manager sales 50000 4 amit manager account 47000 5 tarun peon sales 15000 6 deepak clerk sales 23000 

Lisää esimerkkejä

Annetulle tekstitiedostolle:

$cat>geeksforgeeks.txt A B C Tarun A12 1 Mies B6 2 Praveen M42 3 

1) Ensimmäisen kohteen tulostaminen geeksforgeeks.txt-tiedoston jokaiselta riviltä rivinumeron (NR) kanssa erotettuna -merkillä:

$ awk '{print NR '- ' $1 }' geeksforgeeks.txt 
1 - A 2 - Tarun 3 – Manav 4 - Praveen 

2) Toisen sarakkeen/kohteen palauttaminen tiedostosta geeksforgeeks.txt:

Kysymyksen pitäisi olla: - Toisen sarakkeen/kohteen palauttaminen tiedostosta geeksforgeeks.txt:

$ awk '{print $2}' geeksforgeeks.txt 
B A12 B6 M42 

3) Tulosta mikä tahansa ei-tyhjä rivi, jos sellainen on

$ awk 'NF  <0' geeksforgeeks.txt 

tässä NF:n tulee olla 0 vähintään ja käyttäjän on tulostettava myös rivinumero:

oikea vastaus: awk 'NF == 0 {print NR}' geeksforgeeks.txt

TAI

awk 'NF <= 0 {tulosta NR}' geeksforgeeks.txt

0 

4) Löydät tiedostossa olevan pisimmän rivin pituuden seuraavasti:

$ awk '{ if (length($0)>max) max = pituus($0) } END { print max }' geeksforgeeks.txt 
13 

5) Tiedoston rivien laskeminen:

$ awk 'END { print NR }' geeksforgeeks.txt 
3 

6) Tulostusrivit, joissa on yli 10 merkkiä:

$ awk 'length($0)>10' geeksforgeeks.txt>>     

8) Tulosta ensimmäisten numeroiden neliöt 1:stä n:ään sanomalla 6:

$ awk 'BEGIN { for(i=1;i <=6;i++) print 'square of', i, 'is',i*i; }' 
square of 1 is 1 square of 2 is 4 square of 3 is 9 square of 4 is 16 square of 5 is 25 square of 6 is 36