Täydellinen awk-opetusohjelma Linuxille: käytännöllinen vaiheittainen opas

Viimeisin päivitys: 15/12/2025
Kirjoittaja: Isaac
  • awk on työkalu ja skriptikieli, joka on suunnattu rivi- ja sarakeperusteiseen tekstinkäsittelyyn ja sopii erinomaisesti tulosteiden suodattamiseen, muuntamiseen ja analysointiin. komennot ja tiedostot.
  • Sen avulla voit määrittää kuvioita ja toimintoja yhdistämällä säännöllisiä lausekkeita, erikoismuuttujia, kuten $0, $1, NF tai NR, ja funktioita, kuten length, substr tai match, jolloin voit luoda erittäin tarkkoja suodattimia.
  • awk toimii mukavasti erottimien ja kenttien kanssa käyttämällä FS:ää, OFS:ää ja optioita, kuten -F, ja voi formatear tulostaa komennoilla print ja printf, suorittaa matemaattisia laskutoimituksia ja hallitsee muuttujia komennolla -v.
  • On mahdollista luoda kokonaisia ​​awk-skriptejä, jotka automatisoivat monimutkaisia ​​tehtäviä, mukaan lukien haut ja korvaukset gsub-komennolla, edistyneet laskutoimitukset ja raporttien luominen komennoista, kuten ps, df tai järjestelmätiedostoista.

awk-opetusohjelma Linuxissa

Kun alat ottaa konsolin tosissaan Linux Huomaat, että tekstin kanssa työskentely ei ole vain tiedostojen katselemista cat Ja siinäpä se sitten onkin. Heti kun pääset sisään lokit Valtavien prosessien, komentojen tulosteiden tai CSV-tiedostojen luetteloiden käsittelyyn tarvitset paljon tehokkaamman tavan suodattaa, muuntaa ja tiivistää tietoja ajamatta itseäsi hulluksi.

Siinä kohtaa awk astuu kuvaan.: komento, joka on enemmän kuin pelkkä suodatin, käytännössä kieli ohjelmointi Awk on tekstinkäsittelytyökalu, jonka avulla voit etsiä kuvioita, valita sarakkeita, suorittaa laskutoimituksia, määritellä ehtoja, käyttää muuttujia, silmukoita, funktioita ja jopa kirjoittaa kokonaisia ​​skriptejä. Tässä awk-opetusohjelmassa Linuxille tutkimme sitä askel askeleelta perusasioista melko edistyneisiin käyttötarkoituksiin ja sisällytämme kaikenlaisia ​​reaalimaailman konsoliesimerkkejä.

Mikä on awk ja mihin sitä käytetään Linuxissa?

Awk on sekä komentorivityökalu että skriptikieli Se on suunniteltu analysoimaan riveihin ja kenttiin jäsenneltyä tekstiä, ja sen nimi tulee sen luojien (Aho, Weinberger ja Kernighan) nimikirjaimista. Sitä on käytetty 70-luvun lopulta lähtien, mutta se on edelleen keskeinen osa missä tahansa ympäristössä. unix tai GNU/Linux (esimerkiksi Käytä vanhaa Unixia tietokoneellasi).

Awkin filosofia on hyvin yksinkertainen.: Käy tiedoston (tai komennon tulosteen) läpi rivi riviltä, ​​jakaa jokaisen rivin sarakkeisiin erottimen mukaan, tarkistaa, täyttyykö ehto, ja jos täyttyy, suorittaa toiminnon. Jos et määritä ehtoa, toimintoa sovelletaan kaikkiin riveihin; jos et määritä toimintoa, oletustoiminto on koko rivin tulostaminen.

Tällä yksinkertaisella mekanismilla voit tehdä todella uskomattomia asioita.: näyttämästä vain joitakin sarakkeita ps o df...summien laskemiseen, monimutkaisten kuvioiden suodattamiseen säännöllisten lausekkeiden avulla, tekstin korvaamiseen, raporttien muotoiluun, CSV-tiedostojen käsittelyyn tai jopa useiden kymmenien rivien mittaisten komentosarjojen kirjoittamiseen.

Vaikka awk saattaa muistuttaa hieman grepistä tai sedistäSen lähestymistapa on jäsennellympi: ajattele rivejä tietueina ja sanoja (tai kenttiä) sarakkeina, sisäisillä muuttujilla ja minikielellä, joka tekee siitä ihanteellisen taulukkomuotoisen datan nopeaan käsittelyyn.

Käytännössä, jos haluat alkaa kirjoittaa kunnollisia komentosarjoja...Awkin ja muiden apuohjelmien, kuten sed, grep, cut ja yritys. Ne ovat Linuxin tekstinkäsittelyn peruspilareita.

Asenna ja suorita awk (gawk) järjestelmässäsi

Useimmissa nykyaikaisissa GNU/Linux-jakeluissaawk on jo asennettuna oletuksena, yleensä GNU awk -versiossa (gawkVoit tarkistaa sen tällä:

awk --version

Jos et jostain syystä ole asentanut sitäDebianissa, Ubuntussa ja niiden johdannaisissa voit käyttää paketinhallintaa:

sudo apt update && sudo apt install gawk

Se on saatavilla myös macOS:ssä.Voit käyttää järjestelmäversiota tai asentaa päivitetyn version Homebrew'lla:

brew install gawk

Asennuksen jälkeen awk:ta käytetään aina samalla idealla.Voit välittää ohjeita yksittäisten lainausmerkkien ja tiedoston välillä (tai pipetoida toisen komennon tulosteen). Esimerkiksi:

awk '{print}' archivo.txt

Voit käyttää awk:ta myös skriptien tulkkina, joka osoittaa suoritettavan tiedoston polun tiedoston ensimmäisellä rivillä:

#!/usr/bin/awk -f

ja sitten ajamalla käsikirjoitus suoraan tai awk -f script.awk.

Perussyntaksi: mallit ja toiminnot

awkin käyttö terminaalissa

awk-kielen minimaalinen rakenne on:

awk 'patrón { acción }' fichero

Tiedoston jokaista riviä verrataan kuvioon.Jos se täsmää, aaltosulkeiden sisällä oleva toiminto suoritetaan. Jos jätät kuvion pois, toimintoa sovelletaan kaikkiin riveihin. Joitakin keskeisiä ideoita:

Erikoismuuttujat, joihin viitataan kullekin riville:

  • $0: koko rivi.
  • $1, $2, $3, …: rivin kentät (sarakkeet), erotettuna määritellyllä erottimella.
  • NF: nykyisen rivin kenttien lukumäärä.
  • NR: nykyinen rekisteröintinumero (globaali rivinumero).
  • FNR: rivinumero nykyisessä tiedostossa, hyödyllinen käsiteltäessä useita tiedostoja.

Erityisohjeet:

  • BEGIN { … }: lohko, joka suoritetaan ennen minkään rivin lukemista.
  • END { … }: lohko, joka suoritetaan kaikkien rivien käsittelyn jälkeen.

Yleisimmät tulostuskomennot:

  • print: tulostaa argumentit erotettuna tulosteen erottimella (OFS(oletusarvoisesti välilyönti).
  • printf: samanlainen kuin printf C-kielellä se mahdollistaa yksityiskohtaisen muotoilun ilman automaattisten rivinvaihtojen lisäämistä.
  Kuinka aktivoida ja soittaa videopuheluita Instagramissa puhelimellasi tai tietokoneellasi

Minimalistinen esimerkki tiedoston tulostamisesta täsmälleen sellaisenaan, ikään kuin se olisi cat:

awk '{print}' archivo.txt

Tai jos haluat sen näyttävän myös jokaisen viivan pituuden:

awk '{print length, "\t", $0}' archivo.txt

Sarakkeiden ja erottimien kanssa työskentely awk:ssa

Yksi awk:n star-käyttötavoista on sarakkeiden manipulointi komentotuloista, kuten ps, df tai tiedostoja, kuten /etc/passwdOletusarvoisesti awk käsittelee erottimena mitä tahansa välilyöntiä tai tabulaattoria, mutta voit käyttää käytännössä mitä tahansa erotinmerkkiä.

Valitse tietyt sarakkeet

Kuvittele uloskäynti ps useilla sarakkeilla (PID, TTY, TIME, CMD…)Jos haluat nähdä vain PID:t, toimi seuraavasti:

ps | awk '{print $1}'

Jos olet kiinnostunut toisesta sarakkeesta (esimerkiksi TTY):

ps | awk '{print $2}'

Ja jos haluat ohittaa ensimmäisen rivin (otsikon)Voit suodattaa rekisterinumeron mukaan:

ps | awk 'NR>1 {print $1}'

Idea on hyvin yksinkertainen.: jokainen symbolin jälkeinen numero $ Se viittaa vastaavaan sarakkeeseen, aina suhteessa nykyiseen erotinmerkkiin.

Muuta erotinmerkkiä toiminnolla -F ja FS

Monet järjestelmätiedostot eivät ole erotettu toisistaan ​​välilyönneillä.mutta muiden toimesta symbolitKlassikko on /etc/passwdjossa kentät ovat erotettu toisistaan :Tiedoston käsittelemiseksi sarakkeittain on kaksi vaihtoehtoa: vaihtoehto -F komentorivillä tai muuttujalla FS lohkon sisällä BEGIN.

Käyttämällä -F-valitsinta komentorivillä:

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

Tässä esimerkissä näkyvät vain käyttäjätunnukset (ensimmäinen kenttä), koska erotin on nyt :Jos haluat myös UID:n ja GID:n (kentät 3 ja 4), toimi seuraavasti:

cat /etc/passwd | awk -F ":" '{print $1, $3, $4}'

Tämän komennon ongelmana on, että tuloste juuttuu yhteen. Jos et määritä eksplisiittisiä erottimia, voit lisätä välilyöntejä tai sarkainmerkkejä manuaalisesti:

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

Jos haluat taulukoidumman tuloksenvoit käyttää \t välilehtien lisäämiseksi:

cat /etc/passwd | awk -F ":" '{print $1 "\t" $3 "\t" $4}'

Vaihtoehto, jossa FS on BEGIN-lohkossa Sen avulla voit asettaa erottimen itse awk-skriptissä:

cat /etc/passwd | awk 'BEGIN { FS=":" } {print $1 "\t" $3 "\t" $4}'

Molemmat lähestymistavat ovat toiminnallisesti samanarvoisiavaikka käyttää BEGIN {FS=...} Yleensä on siistimpää kirjoittaa uudelleenkäytettäviä .awk-skriptejä.

FS ja OFS: tulo- ja lähtöerottimet

Kenttäerottimen (FS) lisäksi awk:ssa on OFS (lähtökenttien erotin)joka määrittää, miten kentät erotellaan, kun käytät print pilkkujen kanssa:

cat /etc/passwd | awk 'BEGIN { FS=":"; OFS=" - " } {print $1, $3, $4}'

Tässä tapauksessa luet mukana : mutta sinä kirjoitat - , tuottaen seuraavanlaisen tulosteen:

root - 0 - 0
daemon - 1 - 1
...

Tämä FS/OFS-yhdistelmä on erittäin hyödyllinen datan "uudelleenmuotoiluun".Esimerkiksi muuntaaksesi tiedoston muodosta toiseen tai valmistellaksesi luettavia tulosteita, jotka sitten viedään toiseen järjestelmään.

Hae viimeinen kenttä, jossa on $NF (ja edelliset)

Monissa komentotuloksissaKiinnostuksesi kohteena oleva kenttä on lopussa, mutta sarakkeiden tarkka määrä vaihtelee. Siinä kohtaa $NF (Kenttien määrä) yksinkertaistaa elämääsi: se on aina viimeinen kenttä nykyisellä rivillä.

Esimerkiksi /etc/shells Kelvolliset komentotulkkipolut näkyvät jokaisen rivin lopussaJoskus toisessa sarakkeessa, joskus kolmannessa jne. Pelkän komentotulkin nimen (viimeisen kauttaviivan jälkeisen osan) tulostamiseksi:

awk -F "/" '/^\// {print $NF}' /etc/shells

Jos sitten haluat säilyttää vain yksilölliset arvot (ilman kaksoiskappaleita), voit ketjuttaa uniq:

awk -F "/" '/^\// {print $NF}' /etc/shells | uniq

Ja jos sinua kiinnostaa polun toiseksi viimeinen osa (esimerkiksi edellinen hakemisto), voit käyttää $(NF-1) o $(NF-2):

awk -F "/" '/^\// {print $(NF-1)}' /etc/shells

awk -F "/" '/^\// {print $(NF-2)}' /etc/shells

Suodata viivoja kuvioiden, pituuden ja loogisten ehtojen avulla

Awk loistaa, kun haluat pysyä vain tietyissä riveissä tekstimallien, tiettyjen sarakkeiden tai numeeristen ehtojen perusteella. Yhdistä säännöllisiä lausekkeita, loogisia operaattoreita ja funktioita, kuten length tehdä erittäin tarkkoja suodattimia.

Suodata kuvioiden ja säännöllisten lausekkeiden mukaan

Suorin tapa suodattaa sisällön mukaan on sijoittaa säännöllinen lauseke kauttaviivojen väliin. Juuri ennen näppäimiä:

awk '/patrón/ {print}' archivo.txt

Esimerkiksi lähdön myötä df Voit näyttää vain rivit, jotka alkavat kauttaviivalla (liitetyt tiedostojärjestelmät):

df | awk '/^\// {print}'

Jos haluat tietyn osion, esim. /dev/sda5:

df | awk '/^\/dev\/sda5/ {print}'

Voit myös suodattaa kuvioiden mukaan rivin alussa tai lopussa käyttäen ^ y $:

awk '/^tmpfs/ {print}' archivo.txt
awk '/\/shm$/ {print}' archivo.txt

Ja yhdistä useita kriteerejä loogisella operaattorilla &&Esimerkiksi rivit, jotka alkavat tmpfs ja päättyy /dev/shm:

df | awk '/\/shm$/ && /^tmpfs/ {print}'

Suodata sarakkeiden mukaan ja näytä vain sinua kiinnostavat asiat

Usein haluat suodattaa paitsi rivejä myös sarakkeita.Jatkuu df -h, voit näyttää vain oikeita tiedostojärjestelmiä (^/) ja säilytä sitten sarakkeet 1, 2 ja 3:

  Täydellinen opas powercfg-komennon hallintaan Windowsissa

df -h | awk '/^\// {print $1 "\t" $2 "\t" $3}'

Awkissa voit jopa työskennellä kenttien kanssa lennossaEsimerkiksi lisää sarakkeet 2 ja 3 (käytetty + käytettävissä) nähdäksesi lasketun "kokonaiskapasiteetin":

df -h | awk '/^\// {print $1 "\t" $2 + $3}'

Jos haluat lisätä literaaliyksikön ”G” tuloksen loppuun:

df -h | awk '/^\// {print $1 "\t" $2 + $3 "G"}'

Suodata rivin pituuden mukaan käyttämällä length()-funktiota

Toiminto length() mittaa merkkijonon merkkien määränSitä käytetään normaalisti $0 (koko rivi), mutta voit käyttää sitä myös tietyn sarakkeen kanssa.

Näyttää vain viivat /etc/shells yli 9 merkkiä:

awk 'length($0) > 9' /etc/shells

Jos haluat nähdä jokaisen rivin pituuden:

awk '{print length, "\t", $0}' /etc/shells

Voit myös suodattaa pituuden mukaan ja tulostaa sitten vain pituuden.:

awk 'length($0) > 9 {print length}' /etc/shells

Yhdistä useita ehtoja &&-merkillä ja jos

Säännöllisten lausekkeiden käytön lisäksi alussaVoit kirjoittaa lohkon sisällä kokonaisia ​​ehtoja käyttämällä if, vertailu ja loogiset operaattorit.

Esimerkiksi näytetään vain rivit df -h jotka alkavat t ja jonka sarakkeessa 6 on yli 8 merkkiä:

df -h | awk '/^t/ && length($6) > 8 {print $0}'

Toinen tyypillinen tapaus on prosessien etsiminen viimeisen kentän perusteella (komento suoritettu) funktion tulosteessa ps -efViimeinen kenttä on $NFJoten voit käyttää:

ps -ef | awk '{ if ($NF == "firefox") print $0 }'

Jos välität vain PID:stä ja komennosta:

ps -ef | awk '{ if ($NF == "firefox") print $2, $NF }'

Kontrolliviivat, joilla on NR, alueet ja kentän pituus

NR (tietueiden lukumäärä) -muuttuja Se laskee, kuinka monta riviä on tähän mennessä luettu (globaalisti). Tämä mahdollistaa yleisiä asioita, kuten otsikoiden ohittamisen, tiettyjen rivialueiden tulostamisen tai vain ensimmäisen rivin näyttämisen.

Laske rivit ja näytä vain ensimmäinen tai toinen

Tiedoston rivien kokonaismäärän laskeminen käyttämätön wc -l Voit tehdä:

awk 'END {print NR}' archivo.txt

Jos haluat tulostaa vain ensimmäisen rivin:

awk 'NR==1 {print}' archivo.txt

Ja näyttää vain toisen rivin:

awk 'NR==2 {print}' archivo.txt

Tulosta alkaen tietyltä riviltä tai alueelta

Näyttää kaikki rivit kolmannesta eteenpäin Voit käyttää yksinkertaista ehtoa > o >=:

ps -aux | awk 'NR>2 {print}'

Jos haluat alueen, esimerkiksi rivit 2–4 en /etc/shells:

cat /etc/shells | awk 'NR==2, NR==4 {print $0}'

Voit myös tulostaa rivinumeron sisällön viereen:

cat /etc/shells | awk 'NR==2, NR==4 {print NR, $0}'

Tiettyjen kenttien pituus

Kokonaisten viivojen pituuden mittaamisen lisäksiVoit tarkistaa tietyn sarakkeen pituuden. Esimerkiksi nähdäksesi, kuinka monta merkkiä tiedostojärjestelmässä (sarakkeessa 1) on funktion tulosteessa df -h:

df -h | awk '{print length($1) "\t" $1}'

Jos haluat ohittaa otsikon (ensimmäinen rivi) lisää NR>1:

df -h | awk 'NR>1 {print length($1) "\t" $1}'

Hyödyllisiä funktioita: substr, match, RSTART ja RLENGTH

Awk sisältää hyvän valikoiman tekstifunktioitaKaksi tehokkainta hakutoimintoa ovat substr y match, jälkimmäinen muuttujien mukana RSTART y RLENGTH.

Tekstin leikkaaminen substr()-funktiolla

Toiminto substr(cadena, inicio) o substr(cadena, inicio, longitud) Sen avulla voit poimia alimerkkijonoja. Esimerkiksi poistaaksesi viisi ensimmäistä merkkiä jokaiselta riviltä /etc/shells:

cat /etc/shells | awk '{print substr($0, 5)}'

Jos et halua käsitellä ensimmäistä riviä (esimerkiksi kommentin), voit käyttää NR:ää:

cat /etc/shells | awk 'NR>1 {print substr($0, 5)}'

Huomaa, että ensimmäinen parametri on merkkijono (yleensä $0) ja toinen osoittaa, minkä hahmon haluat alkaa näyttää.

Kuvioiden paikantaminen match()-, RSTART- ja RLENGTH-funktioilla

Toiminto match(cadena, /regex/) etsi säännöllistä lauseketta merkkijonostaJos osuma löytyy, se palauttaa lähtösijainnin (perustuu lukuun 1) ja täyttää kaksi muuttujaa:

  • RSTART: kohta, josta löydetty kuvio alkaa.
  • RLENGTH: ottelun pituus.

Esimerkiksi kaikille riveille ps -aux jotka sisältävät ”suorittimen”Voit näyttää koko viivan ja kuvion sijainnin:

ps -aux | awk 'match($0, /cpu/) {print $0 " Contiene \"cpu\" en la posición " RSTART}'

Jos haluat tietää myös löydetyn kuvion mitat, käytä vain RLENGTH uloskäynnillä:

ps -aux | awk 'match($0, /cpu/) {print $0 " Posición=" RSTART " Longitud=" RLENGTH}'

Tämän tyyppistä hakua käytetään laajalti tekstianalyysissä ja bioinformatiikassa.Esimerkiksi FASTA-tiedostoissa, joissa olet kiinnostunut paikantamaan tiettyjä motiiveja sekvensseistä.

Matemaattiset laskutoimitukset ja muuttujat awk:ssa

Awk ei rajoitu tekstin näyttämiseen: antaa sinun suorittaa numeerisia toimintoja suoraan kentille, sisäisille muuttujille tai arvoille, jotka välität komentoriviltä tai komentotulkkiympäristöstä.

  PKPASS-tiedostojen avaaminen ja muuntaminen Windowsissa

Määrittele muuttujat -vy-valitsimella ja käytä niitä BEGIN-komennossa

Voit määrittää muuttujia optiolla -v kun kutsutaan awk:taEsimerkiksi kahden kiinteän luvun kertominen:

awk -v a="10" -v b="20" 'BEGIN {print "La multiplicación de a x b es", a*b}'

Muuttujien arvoja on myös mahdollista välittää komentotulkista.Jos bashissa teet näin:

a=1.5
b=4

Sitten voit käyttää niitä awkissa näin:

awk -v a="$a" -v b="$b" 'BEGIN {print "La multiplicación de a x b es", a*b}'

BEGIN-lohkoa käytetään tässä, koska emme käsittele mitään tiedostoa.Haluamme vain suorittaa koodin kerran ja näyttää tuloksen.

Matemaattiset funktiot: sqrt- ja for-silmukat

Awk sisältää useita matemaattisia vakiofunktioita.Kuin sqrt() neliöjuuria varten. Esimerkiksi luvun 400 neliöjuuri:

awk 'BEGIN {print sqrt(400)}'

Voit myös yhdistää sen for-silmukoihin täydellisten luetteloiden luomiseksi:

awk 'BEGIN { for(i=1; i<=10; i++) print "La raíz cuadrada de", i*i, "es", i }'

Tai siirrä desimaaliarvoja nollasta yhteen pienin välein:

awk 'BEGIN { for(i=0; i<=1; i=i+0.00001) print "La raíz cuadrada de", i*i, "es", i }'

Tällaiset rakenteet tekevät awkista hyvin samankaltaisen kuin perinteinen kieli.vaikka sen luonnollinen elinympäristö on edelleen sarakemuoto.

Kokonaisten skriptien kirjoittaminen ja suorittaminen awk:ssa

Kun awk-komennot alkavat venyä pitkiksi Jos haluat käyttää monimutkaisia ​​muunnoksia uudelleen, järkevää on tallentaa ne skriptitiedostoon, jonka tiedostopääte on . .awk (vaikka se ei ole pakollista).

Tyypillinen esimerkki koskee tulosteen käsittelyä df näyttääksesi vain tietyt merkinnät, jotka täyttävät käytettävissä olevaa tilaa koskevat ehdot, ja muotoillaksesi tulokset pienenä taulukkona.

Kuvittele, että haluat seuraavaa:

  • Näytä vain tiedostojärjestelmät, joiden nimi alkaa kirjaimella "t" (esimerkiksi tmpfs).
  • Suodata ne, joiden käytettävissä oleva kapasiteetti (sarake 4) on yli 6000 K.
  • Tulosta vain yksikkö (sarake 1) ja sarakkeiden 2 ja 3 summa likimääräisenä kokonaistilana.

Voit luoda skriptin nimeltä capacidad.awk jolla on samanlaista sisältöä kuin tällä (mukautettu ja yksinkertaistettu):

#!/usr/bin/awk -f
BEGIN { printf "%s\n", "Voy a extraer las partes que me interesan del comando df" }
BEGIN { printf "%s\t%s\n", "Unidad", "Capacidad disponible" }
/^t/ && $4 > 6000 {print $1 "\t" $2 + $3 "K"}

Ja suorita se sitten ketjuttamalla df:n tuloste.:

df | awk -f capacidad.awk

Jos haluat parantaa pöydän ulkonäköä, voit korvata print mukaan printf ja käytä formaatteja, kuten %-12s (vasemmalle tasattu teksti, 12 merkkiä) tai %-23d (Desimaaliluku 23 merkissä). Tämä antaa sinulle täydellisen hallinnan sarakkeiden tasauksessa.

Etsi ja korvaa teksti gsub()-funktiolla

Awk voi myös korvata tekstiä samalla tavalla kuin tekisit sed-funktiolla, käyttämällä funktiota gsub() (globaali korvike).

Yleinen syntaksi on:

gsub("texto_o_regex_a_buscar", "texto_de_reemplazo", destino)

Oletetaan esimerkiksi, että tiedosto geekland.txt tekstin kanssa ”Geekland on paras teknologiablogi” ja haluat muuttaa G-alkukirjaimen g:ksi:

awk '{ gsub("G", "g", $0); print $0 }' geekland.txt

Jos et määritä kolmatta parametria, haku suoritetaan $0 oletuksenaOn kuitenkin hyvin yleistä rajoittaa korvaus yhteen sarakkeeseen:

df -h | awk '{ gsub("M", "G", $2); print $2 }'

Tässä tapauksessa muutimme yksikön M G:ksi vain sarakkeessa 2Jos haluat myös näyttää sarakkeen 1 oikein tasattuna, voit yhdistää sen printf:

df -h | awk '{ gsub("M", "G", $2); printf "%-12s %-12s\n", $1, $2 }'

Tämä "Muokkaa saraketta ja tulostan sitten muotoiltuna" -malli Se on erittäin hyödyllinen raporteissa, tiedonsiirroissa tai komentojen tulosteiden nopeassa puhdistuksessa.

Lisäkäyttö: steroiditartunnan saanut kissa ja komentojen suorittaminen

Vaikka se saattaa tuntua hölmöltäawk voi toimia cat Parannettu, koska se voi näyttää tiedoston samalla, kun se lisää lisätietoja (rivinumerot, pituudet jne.).

Triviaali käyttö olisi:

awk '{print}' functions.php

Mutta voit myös numeroida rivejä tai käyttää mitä tahansa suodatinta. ilman, että tarvitsee käyttää mitään lisätyökaluja.

Toinen mielenkiintoinen seikka on, että awk voi suorittaa järjestelmäkomentoja toiminnon mukaan system()Esimerkiksi nykyisen hakemiston näyttämiseksi:

awk 'BEGIN { system("pwd") }'

Tämä ei ole yleisin käytäntö yksinkertaisissa skripteissä.Mutta on hyvä tietää sen olemassaolosta, kun rakennat monimutkaisempia awk:n pohjalta tehtyjä työkaluja.

Awkista tulee tekstinkäsittelyn linkkuveitsi LinuxissaSen avulla voit suodattaa rivejä, valita ja yhdistää sarakkeita, korvata osia, mitata pituuksia, paikantaa kuvioita, laskea yhteen kenttiä, luoda pieniä muotoiltuja raportteja ja jopa rakentaa kokonaisia ​​komentosarjoja, jotka käsittelevät muiden komentojen tulosteita. Kun opit sen käytön, siitä tulee välttämätön työkalu aina, kun työskentelet... terminaali ja strukturoitua dataa.

Suorita Ancient Unix -opetusohjelma
Aiheeseen liittyvä artikkeli:
Kuinka käyttää vanhoja UNIX-käyttöjärjestelmiä tietokoneellasi: SIMH, Docker, V7/V8, BSD ja paljon muuta