Awk: shell-scripts leren met behulp van de awk-terminalopdracht

Awk: shell-scripts leren met behulp van de awk-terminalopdracht

Awk: shell-scripts leren met behulp van de awk-terminalopdracht

Het "awk" -commando in vrije besturingssystemen van het GNU / Linux-type is een zeer krachtig commando, dat ons helpt om meer controle te hebben bij het verwerken van gegevens van andere commando's of commando-commando's. De naam AWK is afgeleid van de initialen van de achternamen van de auteurs: Alfred Aho, peter Weinberger en Brian KErnighan.

Dit commando biedt een scripttaal voor tekstverwerking waarmee we: variabelen kunnen definiëren, strings en rekenkundige operatoren kunnen gebruiken, flow control en cycli kunnen gebruiken en opgemaakte rapporten kunnen genereren. Eigenlijk is Awk meer dan alleen een patroonverwerkingsopdracht, het is een volledige semantische analysetaal.

Inleiding tot het "awk" -commando

AWK was een van de eerste zeer populaire console-hulpprogramma's voor het beheren (verwerken / extraheren) van gegevens door de functionaliteit van UNIX-pipelines te maximaliseren. De taal die door dit hulpprogramma wordt geleverd, is momenteel een standaard in bijna alle moderne besturingssystemen van het UNIX-type, zozeer zelfs dat het deel uitmaakt van de basisspecificaties van UNIX, dus het is meestal al in de meeste standaard geïnstalleerd.

De meest voorkomende syntaxis is: awk 'programma'-bestanden en waar' programma 'kan zijn: patroon {actie} patroon {actie}. De opdracht leest de bestandsinvoer regel voor regel. Elke rij wordt in volgorde met elk patroon vergeleken; Voor elk patroon dat overeenkomt met de rij, wordt de bijbehorende actie uitgevoerd.

Een eenvoudig voorbeeld als:

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

het vraagt ​​naar het eerste veld of het de root is van elke regel in / etc / passwd en drukt het af met inachtneming van de ":" met -F: als een veldscheidingsteken.

Inleidend voorbeeld Awk

Praktische voorbeelden

Lijst met meest gebruikte commando's

Bekijk een lijst op basis van de geschiedenis van de systeemterminal, gerangschikt van de meest gebruikte tot de minst gebruikte.

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

voorbeeld:

Voorbeeld 1: Awk-opdracht

Grafiek (tabel) met het aantal verbindingen voor elke host

Maak een op ASCII-tekst gebaseerde grafiek die het totale aantal verbindingen van de host naar elk IP-adres laat zien.

netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'

voorbeeld:

Voorbeeld 2: Awk-opdracht

Lijst met mappen op grootte

Druk op het scherm de lijst met mappen van het huidige pad af van het grootste naar het kleinste en laat de labels zien die overeenkomen met hun grootte met de letters: g, m en k.

du --max-depth=1 | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'

voorbeeld:

Voorbeeld 3: Awk-opdracht

Toon verkeer van een netwerkinterface

Bekijk het inkomende en uitgaande dataverbruik online in kilobytes (kb) voor een gespecificeerde netwerkinterface.

while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth0 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done

voorbeeld:

Verkrijg een fibonacci-nummerreeks

Maak een lijst met X-groottenummers volgens een fibonacci-patroon met 2 te construeren basisnummers.

seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'

voorbeeld:

Voorbeeld 5: Awk-opdracht

Grafische lijst van bestandsstructuur op grootte

Verkrijg een lijst met alle mappen in de root van het besturingssysteem, samen met de afbeelding (balken) en numerieke weergave als percentage van hun grootte erin.

t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');sudo du / --max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++){printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'

voorbeeld:

Voorbeeld 6: Awk-opdracht

Geef een overzicht van de bestandstypen in een directory

Geef een lijst weer van de bestandstypen in een directory, samen met het aantal bestanden dat ermee overeenkomt.

find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g

voorbeeld:

Voorbeeld 8: Awk-opdracht

Deze voorbeelden van opdrachtregels die het awk-commando gebruiken, hoop ik dat u het erg nuttig vindt. En ze dienen om direct vanaf de console te worden gebruikt of indirect door ze in een script in te voegen (geautomatiseerde taak).

In de volgende post over Shell Scripting zullen we andere commando's onderzoeken.

Als je wat meer wilt weten over het "grep" commando, bezoek dan deze link "DEBIAN Wiki”En als je meer wilt weten over Shell Scripting in onze eigen Blogkunt u onze andere publicaties over dit onderwerp bekijken door hier te klikken: Scripten DesdeLinux


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   smoking zei

    Ik begreep alleen het eerste voorbeeld, verder niets 🙁