Kuinka hallita AWK-komento käsittelemään tekstejä Linuxissa?

AWK -komento on tehokas ja monipuolinen työkalu tekstidatan käsittelyyn ja muuntamiseen Linuxissa. AWK voi tehdä elämästäsi helpompaa vain muutamalla koodirivillä, poimipa tietoja, suodatatpa rivejä, muotoilet uudelleen tulosteita tai suoritat laskelmia. Tässä artikkelissa opit käyttämään AWK-komentoa tekstinkäsittelyyn Linuxissa.

Mikä on AWK-komento?

AWK-ohjelmointikieli.svg

AWK-komento on tulkittu ohjelmointikieli, joka toimii Linux-päätteessä. Sen nimi tulee sen tekijöiden Alfred Ahon, Peter Weinbergerin ja Brian Kernighanin nimikirjaimista. AWK oli alun perin suunniteltu käsittelemään tiedostoja, jotka on jäsennelty erottimilla erotettuihin kenttiin, kuten CSV-tiedostoja tai /etc/passwd-tiedostoja. Mutta AWK pystyy käsittelemään myös monimutkaisempia tekstitiedostoja, kuten HTML- tai XML-tiedostoja. AWK ei ole olio-ohjelmointikieli , mutta sen avulla voit määrittää paikallisia tai globaaleja toimintoja ja muuttujia. Siinä on myös ohjausrakenteita, kuten silmukoita ja ehtoja.

AWK-komennon yleinen syntaksi on seuraava:

awk [valinnat] 'ohjelma' [tiedostot]

Ohjelma tiedostojen jokaiselta riviltä etsittävät mallit , jotka suoritetaan, kun kuvio löytyy. Vaihtoehdot tai tulostusmuotoa.

Kuinka tulostaa tekstiä AWK-komennolla?

Kuinka käyttää Awk-komentoa Linuxissa

AWK-komennolla voidaan tulostaa viesti päätelaitteelle tekstin kuvion perusteella. Jos suoritat AWK-komennon ilman syytä ja pelkän tulostuskomennon, AWK tulostaa viestin aina, kun painat Enter-näppäintä.

Jos esimerkiksi kirjoitat:

awk '{tulosta "Hei"}'

Ja paina Enter useita kertoja, saat:

Hyvää huomenta, hyvää huomenta, hyvää huomenta

Voit pysäyttää AWK-komennon painamalla Ctrl+C.

Jos haluat tulostaa tiedoston sisällön AWK-komennolla, voit käyttää BEGIN- , joka suoritetaan ennen tiedoston lukemista, ja END , joka suoritetaan tiedoston lukemisen jälkeen. testi.txt- niminen tiedosto , joka sisältää:

Tämä on testi AWK on loistava työkalu Linux on paras käyttöjärjestelmä

Voit tulostaa tiedoston sisällön seuraavalla komennolla:

awk 'BEGIN {tulosta "Tässä on testi.txt-tiedoston sisältö:"} {tulosta} END {tulosta "Tiedoston loppu"}' test.txt

Mikä antaa:

Tässä on test.txt-tiedoston sisältö: Tämä on testi AWK on loistava työkalu Linux on paras käyttöjärjestelmä Tiedoston loppu

{print} -komento ilman argumentteja tulostaa koko rivin. Voit myös tulostaa tietyn kentän käyttämällä $n , jossa n on kentän numero. Oletuksena kentät erotetaan välilyönneillä tai sarkaimilla, mutta voit muuttaa erotinta -F .

Jos esimerkiksi haluat tulostaa /etc/passwd- , jotka on erotettu kaksoispisteellä ( :) , voit käyttää seuraavaa komentoa:

awk -F: '{print $1 " " $3}' /etc/passwd

Joka antaa jotain tällaista:

root 0 daemon 1 bin 2 sys 3 sync 4 pelit 5 mies 6 lp 7 posti 8 uutiset 9 uucp 10 välityspalvelin 13 www-data 33 ...

Voit myös tulostaa aritmeettisia lausekkeita tai merkkijonoja AWK-komennolla. Jos esimerkiksi haluat tulostaa test.txt- , voit käyttää seuraavaa komentoa:

awk '{print $2^2}' test.txt

Mikä antaa:

on 16 on

testi.txt- rivien lukumäärän , voit käyttää erikoismuuttujaa NR , joka sisältää nykyisen rivin numeron. Voit esimerkiksi käyttää seuraavaa komentoa:

awk 'END {print NR}' test.txt

Mikä antaa:

3

Kuinka suodattaa tekstiä AWK-komennolla?

dl.beatsnoop.com peukalo 1687289446

AWK-komentoa voidaan käyttää tekstin suodattamiseen kuvioiden tai ehtojen perusteella. Jos määrität kuvion ennen toimintoa, AWK suorittaa toiminnon vain, jos kuvio löytyy riviltä. Malli voi olla säännöllinen lauseke, vertailu, looginen operaatio tai näiden yhdistelmä.

Jos esimerkiksi haluat tulostaa test.txt- , jotka sisältävät sanan Linux , voit käyttää seuraavaa komentoa:

awk '/Linux/ {print}' test.txt

Mikä antaa:

Linux on paras käyttöjärjestelmä

Jos haluat tulostaa /etc/passwd- , joiden UID on suurempi kuin 1000, voit käyttää seuraavaa komentoa:

awk -F: '$3 > 1000 {print}' /etc/passwd

Joka antaa jotain tällaista:

systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin tss:x:131:142:TPM-ohjelmistopino,,,:/var/lib/tpm:/bin/false _rpc: x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x:133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139: Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq:x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/ei ole olemassa:/bin/false snap_daemon:x:584788:584788::/ei ole olemassa:/bin/false ...

Voit myös käyttää loogisia operaattoreita && (ja), || (tai ja ! (ei) yhdistää kuvioita. Jos esimerkiksi haluat tulostaa /etc/passwd- , joiden UID on suurempi kuin 1000 ja komentotulkki muu kuin /usr/sbin/nologin , voit käyttää seuraavaa komentoa:

awk -F: '$3 > 1000 && $7 != "/usr/sbin/nologin" {print}' /etc/passwd

Kopioida

Joka antaa jotain tällaista:

tss:x:131:142:TPM-ohjelmistopino,,,:/var/lib/tpm:/bin/false _rpc:x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x: 133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139:Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq :x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/olematon:/bin/false snap_daemon:x:584788:584788::/olematon:/bin/false ...

Kuinka muokata tekstiä AWK-komennolla?

dl.beatsnoop.com peukalo 1687289615

AWK-komentoa voidaan käyttää tekstin muokkaamiseen sisäänrakennettujen funktioiden tai erikoismuuttujien avulla. Jos esimerkiksi haluat korvata välilyönnit yhdysmerkillä test.txt- , voit käyttää gsub- , joka korvaa kaikki merkkijonon esiintymät toisella. Voit myös käyttää erityistä OFS- , joka määrittää tuloskentän erottimen. Voit esimerkiksi käyttää seuraavaa komentoa:

awk '{print strftime("%d/%m/%Y %H:%M:%S",$1 " " $2)}' test.txt

Mikä antaa:

30/10/2021 16:13:49
31/10/2021 17:14:50
01/11/2021 18:15:51

Voit katsoa AWK-komentooppaasta muita käytettävissä olevia toimintoja ja muuttujia.

Kuinka käyttää silmukkaa AWK-komennolla?

AWK-komentoa voidaan käyttää silmukoiden suorittamiseen tiedoston kenttien tai rivien yli. For-silmukan syntaksi on seuraava:

(muuttuja taulukossa) -toiminnolle

Missä muuttuja on sen muuttujan nimi, joka peräkkäin ottaa arvot taulukosta , ja toiminta on jokaisessa iteraatiossa suoritettava toiminto.

Jos esimerkiksi haluat tulostaa tiedoston kentät käänteisessä järjestyksessä, voit käyttää for-silmukkaa erikoismuuttujan NF , joka sisältää nykyisen rivin kenttien määrän. Jos sinulla on esimerkiksi test.txt- , joka sisältää:

Tämä on testi AWK on loistava työkalu Linux on paras käyttöjärjestelmä

Voit kääntää kenttien järjestyksen seuraavalla komennolla:

awk '{for (i=NF; i>0; i--) print $i}' test.txt

Mikä antaa:

testi yksi on Tämä loistava työkalu yksi on AWK-käyttöjärjestelmä, paras on Linux
dl.beatsnoop.com peukalo 1687289757

Voit myös käyttää for-silmukkaa iteroidaksesi tiedoston rivejä, joissa on erityinen FNR- , joka sisältää nykyiseen tiedostoon liittyvän rivinumeron. test.txt- parilliset rivinumerot , voit käyttää seuraavaa komentoa:

awk 'FNR%2==0 {tulosta FNR}' test.txt

Mikä antaa:

2
4

Kuinka ajaa AWK-skripti?

tunniste .awk ja antaa sille suoritusoikeudet komennolla chmod +x . Sitten voit ajaa komentosarjan komennolla ./script_name.awk [files] .

Jos sinulla on esimerkiksi skripti nimeltä hello.awk , joka sisältää:

#!/usr/bin/awk -f ALOITA {tulosta "Hei"}

Voit ajaa skriptin seuraavalla komennolla:

./hello.awk

Mikä antaa:

Hyvää huomenta

Kuinka välittää argumentteja AWK-skriptille?

dl.beatsnoop.com peukalo 1687289922

Voit siirtää argumentteja AWK-skriptille kahdella tavalla:

  • Ensimmäinen tapa on käyttää -v muodossa variable=value . Jos esimerkiksi haluat välittää kaksi argumenttia nimeltä var1 ja var2 hello.awk skriptille , voit käyttää seuraavaa komentoa:
awk -v var1=hei -v var2=maailma -f hello.awk 

Ja hello.awk voit käyttää argumentteja muuttujilla $var1 ja $var2 . Jos komentosarjasi sisältää esimerkiksi:

#!/usr/bin/awk -f ALOITA {tulosta $var1 " " $var2}

Saat:

Bonjour Monde
  • Toinen tapa on käyttää erityistä ARGV- , joka sisältää komentosarjalle välitetyt argumentit. Jos esimerkiksi haluat välittää kaksi nimeämätöntä argumenttia hello.awk , voit käyttää seuraavaa komentoa:
awk -f hello.awk hei maailma 

Ja hello.awk ARGV[1]- ja ARGV[2] -indekseillä . Jos komentosarjasi sisältää esimerkiksi:

#!/usr/bin/awk -f ALOITA {tulosta ARGV[1] " " ARGV[2]}

Saat:

Bonjour Monde

UKK

Mitä eroa on AWK:lla ja GAWK:lla?

GAWK on AWK:n GNU-toteutus, joka lisää alkuperäiseen kieleen lisäominaisuuksia, kuten tuki laajennetuille säännöllisille lausekkeille, moniulotteisille taulukoille tai ennalta määritettyille funktioille.

Kuinka korjata AWK-skripti?

AWK-komentosarjan virheenkorjaukseen voit käyttää -W- lint- parametrin , joka näyttää varoitussanomia komentosarjan mahdollisista virheistä. Voit myös käyttää -W- dump-variables kanssa , joka näyttää muuttujan arvot komentosarjan suorituksen lopussa.

Kuinka käyttää AWK-komentoa tietojen lajitteluun?

Jos haluat käyttää AWK-komentoa tietojen lajitteluun, voit käyttää lajittelukomentoa yhdessä AWK:n kanssa. Jos esimerkiksi haluat lajitella /etc/passwd- heidän UID-tunnuksensa mukaan, voit käyttää seuraavaa komentoa:

awk -F: '{print $1, $3}' /etc/passwd | lajitella -n -k2 

Yhdistämällä AWK:n muihin komentoihin (tässä lajittelussa ) pääset helposti paljon pidemmälle tietojen näyttämisessä ja järjestämisessä.

Kuinka tulostaa tiedoston sanamäärä AWK-komennolla?

Voit tulostaa tiedoston sanojen määrän AWK-komennolla käyttämällä erikoismuuttujaa NF , joka sisältää nykyisen rivin kenttien määrän, ja erikoismuuttujaa NR , joka sisältää nykyisen rivin numeron. For-silmukan avulla voit laskea sanojen määrän jokaisella rivillä ja lisätä ne kokonaismuuttujaan . Erikoiskuviolla END voit tulostaa lopputuloksen. testi.txt- niminen tiedosto , joka sisältää:

Tämä on testi AWK on loistava työkalu Linux on paras käyttöjärjestelmä

Voit tulostaa tiedoston sanamäärän seuraavalla komennolla:

awk '{for (i=1; i<=NF; i++) total++} END {tulosta yhteensä}' test.txt

Mikä antaa:

9

Kuinka käyttää AWK-komentoa tietojen poimimiseen CSV-tiedostosta?

Jos haluat käyttää AWK-komentoa tietojen poimimiseen CSV-tiedostosta, voit käyttää -F- vaihtoehtoa asettaaksesi kentän erottimen pilkuksi. testi.csv- niminen tiedosto , joka sisältää:

nimi, etunimi, ikä Alice, Dupont, 25 Bob, Martin, 32 Charles, Durand, 28

Voit poimia ihmisten nimet ja iät seuraavalla komennolla:

awk -F"," '{print $1 " " $3}' test.csv

Mikä antaa:

nimi ikä Alice 25 Bob 32 Charles 28

Kuinka suodattaa tietoja AWK-komennolla?

AWK-komennon avulla voit suodattaa tietoja kuvioiden perusteella, jotka ovat säännöllisiä lausekkeita tai loogisia ehtoja. Kuviot sijoitetaan ennen toimintoja ja erotetaan toisistaan ​​kiharoilla suluilla. Jos esimerkiksi haluat näyttää test.csv- , jotka sisältävät nimen Alice , voit käyttää seuraavaa mallia:

awk -F"," '/Alice/ {print}' test.csv

Mikä antaa:

Alice, Dupont, 25

Jos haluat näyttää test.csv- , jotka ovat vanhempia kuin 30 vuotta, voit käyttää seuraavaa mallia:

awk -F"," '$3 > 30 {print}' test.csv

Mikä antaa:

Bob, Martin, 32

Voit yhdistää useita kuvioita loogisilla operaattoreilla && (ja), || (tai ja ! (Ei). Jos esimerkiksi haluat näyttää test.csv- , joiden nimi alkaa C: tai joiden ikä on alle 10 vuotta vanha, voit käyttää seuraavaa mallia:

awk -F"," '($1 ~ /^C/) || (3 $ < 10) {print}' test.csv 

Mikä antaa:

CAMILLE,M,7 CLARA,F,11 CLEMENT,M,7

Kuinka laskea tilastot AWK-komennolla?

AWK-komennon avulla voit laskea tilastoja tiedoston numeerisista tiedoista, kuten summa, keskiarvo, minimi tai maksimi. Voit tehdä tämän tallentamalla väliarvot muuttujien avulla ja päivittämällä ne jokaisella rivillä. Käyttämällä erityistä END- voimme näyttää lopputuloksen. Jos esimerkiksi haluat laskea test.csv- , voit käyttää seuraavaa ohjelmaa:

awk -F"," 'NR>1 {summa+=$3; count++} LOPPU {tulosta "Summa: " summa; tulosta 'Average: 'sum/count}' test.csv 

Mikä antaa:

Summa: 110 Keskiarvo: 18,3333

Selitykset:

  • Käytämme -F"," määrittääksesi kentän erottimen pilkuksi.
  • Käytämme ehtoa NR>1 ohittamaan tiedoston ensimmäisen rivin, joka sisältää sarakkeiden nimet.
  • Käytämme summa- ja count keräämään iän summan ja lukumäärän. +=- operaattoria suurentaaksemme muuttujia kolmannen kentän arvolla ( $3 ).
  • Käytämme END- lopputuloksen näyttämiseen. Käytämme / laskeaksemme keskiarvon jakamalla summan numerolla.

Samoin, jos haluat laskea test.csv- , voit käyttää seuraavaa ohjelmaa:

awk -F"," 'NR>1 {jos (min=="") min=max=$3; jos (3 dollaria max) max=$3} LOPPU {tulosta "Min: " min; tulosta 'Max: 'max}' test.csv 

Mikä antaa:

Minimi: 6 Max: 32

Selitykset:

  • Käytämme -F"," määrittääksesi kentän erottimen pilkuksi.
  • Käytämme ehtoa NR>1 ohittamaan tiedoston ensimmäisen rivin, joka sisältää sarakkeiden nimet.
  • Käytämme min- ja max tallentamaan vähimmäis- ja enimmäisiän. Alustamme nämä muuttujat kolmannen kentän arvolla ( $3 ), jos ne ovat tyhjiä ( "" ). Käytämme < - ja > arvojen vertailuun ja muuttujien päivittämiseen tarvittaessa.
  • Käytämme END- lopputuloksen näyttämiseen.

Johtopäätös

AWK-komento on olennainen työkalu tekstien käsittelyyn Linuxissa. Sen avulla voit suorittaa monimutkaisia ​​tehtäviä muutamalla koodirivillä, kuten tietojen purkaminen, suodattaminen, muokkaaminen tai laskeminen. Se tarjoaa suurta joustavuutta kuvioiden, toimintojen, toimintojen ja muuttujien ansiosta. Se voidaan yhdistää muihin Linux-komentoihin laajentamaan sen mahdollisuuksia. Voit esimerkiksi käyttää Echo-komentoa Windowsissa Windows viestin tai muuttujan näytöllä. Jos haluat oppia lisää AWK-komennosta, tutustu käsikirjaan tai moniin Internetistä saataviin opetusohjelmiin.

Edellinen artikkeli Kuinka suojata tiedostojen siirto FTPS:llä Windows Serverissä?
Seuraava artikkeli Kuinka saada ilmainen YouTube Premium?
Hei minä, se on François :) Vapaa-ajallani oleva toimittaja, joka rakastaa jakaa intohimoaan: TT High tech! 😍 Olipa kyseessä laitteisto, ohjelmisto, videopelit, sosiaalinen media ja monet muut sivuston alueet. Jaan kanssasi analyysini, testini, tutoriaalini ja suosikkini eri medioissa. Olen osaava ja vaativa teknofiili, joka ei vain seuraa muotia, vaan haluaa ohjata sinua kohti parhaita ratkaisuja. Pysy siis kuulolla!