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 80000Yllä 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.txtLähtö:
ajay manager account 45000 varun manager sales 50000 amit manager account 47000Yllä 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.txtLähtö:
ajay 45000 sunil 25000 varun 50000 amit 47000 tarun 15000 deepak 23000 sunil 13000 satvik 80000Yllä 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.txtLä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 80000Yllä 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.txtLähtö:
ajay 45000 sunil 25000 varun 50000 amit 47000 tarun 15000 deepak 23000 sunil 13000 satvik 80000Yllä 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.txtLähtö:
3 varun manager sales 50000 4 amit manager account 47000 5 tarun peon sales 15000 6 deepak clerk sales 23000Lisää esimerkkejä
Annetulle tekstitiedostolle:
$cat>geeksforgeeks.txt A B C Tarun A12 1 Mies B6 2 Praveen M42 31) Ensimmäisen kohteen tulostaminen geeksforgeeks.txt-tiedoston jokaiselta riviltä rivinumeron (NR) kanssa erotettuna -merkillä:
$ awk '{print NR '- ' $1 }' geeksforgeeks.txt1 - A 2 - Tarun 3 – Manav 4 - Praveen2) Toisen sarakkeen/kohteen palauttaminen tiedostosta geeksforgeeks.txt:
Kysymyksen pitäisi olla: - Toisen sarakkeen/kohteen palauttaminen tiedostosta geeksforgeeks.txt:
$ awk '{print $2}' geeksforgeeks.txtB A12 B6 M423) Tulosta mikä tahansa ei-tyhjä rivi, jos sellainen on
$ awk 'NF <0' geeksforgeeks.txttä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
04) Löydät tiedostossa olevan pisimmän rivin pituuden seuraavasti:
$ awk '{ if (length($0)>max) max = pituus($0) } END { print max }' geeksforgeeks.txt135) Tiedoston rivien laskeminen:
$ awk 'END { print NR }' geeksforgeeks.txt36) 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