Awk: Shelli skriptimise õppimine awk terminali käsu abil

Awk: Shelli skriptimise õppimine awk terminali käsu abil

Awk: Shelli skriptimise õppimine awk terminali käsu abil

GNU / Linuxi tüüpi käsk "awk" vabades operatsioonisüsteemides on väga võimas käsk, mis aitab meil teistest käskudest või käskudest saadud andmete töötlemisel suuremat kontrolli omada. Nimi AWK tuleneb selle autorite perekonnanimede algustähtedest: Alfred Atere, Peeter Weinberger ja Brian KErnighan.

See käsk annab tekstitöötluseks skriptikeele, millega saame: määratleda muutujad, kasutada stringe ja aritmeetilisi operaatoreid, kasutada voo juhtimist ja tsükleid ning genereerida vormindatud aruandeid. Tegelikult on Awk midagi enamat kui lihtsalt mustri töötlemise käsk, see on terve semantiline analüüsikeel.

Sissejuhatus käsusse "awk"

AWK oli üks esimesi väga populaarseid konsooli utiliite andmete haldamiseks (käitlemiseks / väljavõtmiseks) UNIX-torujuhtmete funktsionaalsuse maksimeerimise kaudu. Selle utiliidi pakutav keel on praegu peaaegu kõigi kaasaegsete UNIX-tüüpi operatsioonisüsteemide standard, nii palju, et see on osa UNIX-i põhispetsifikatsioonidest, nii et enamasti on see enamikus vaikimisi juba installitud.

Selle kõige levinum süntaks on: awk 'programmi' failid ja kus 'programm' võib olla: muster {action} muster {action}. Käsk loeb failisisestust üks rida korraga. Iga rida võrreldakse iga mustriga järjestuses; iga reale vastava mustri kohta tehakse vastav toiming.

Lihtne näide:

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

see küsib esimest välja, kui see on faili / etc / passwd iga rea ​​juur, ja prindib selle, võttes välja eraldajana ":" koos -F: -ga.

Sissejuhatav näide Awk

Praktilised näited

Enimkasutatud käskude loend

Vaadake loendit, mis põhineb süsteemiterminali ajaloos, järjestatuna kõige sagedamini kasutatavast kõige vähem.

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

Näide:

Näide 1: käsk Awk

Graafik (tabel) koos kõigi hostide ühenduste arvuga

Looge ASCII tekstipõhine graafik, mis näitab hostide ja IP-ühenduste koguarvu.

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 "" }'

Näide:

Näide 2: käsk Awk

Kataloogide loetelu suuruse järgi

Printige ekraanile praeguse tee kataloogide loend suurimast väiksemani, näidates nende suurusele vastavaid silte tähtede abil: g, m ja 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}'

Näide:

Näide 3: käsk Awk

Liikluse kuvamine võrguliidese kaudu

Vaadake sissetuleva ja väljamineva andmekulu veebis võrgus kilobaitides (kb) määratud võrguliidese jaoks.

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

Näide:

Hankige fibonacci numbriseeria

Koostage fibonacci mustri järgi X koguse numbri loend, millele antakse 2 konstrueeritavat baasinumbrit.

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

Näide:

Näide 5: käsk Awk

Faili struktuuri graafiline loetelu suuruse järgi

Hankige kõigi operatsioonisüsteemi juurte kaustade loend koos graafika (ribad) ja numbrilise esitusega protsentuaalselt nende suurusest selles.

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"}'

Näide:

Näide 6: käsk Awk

Lisage kataloogi failitüüpide kokkuvõte

Kuva kataloogis olevate failitüüpide loend koos sellele vastavate failide arvuga.

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

Näide:

Näide 8: käsk Awk

Need käsurea näited käsuga awk, loodan, et leiate sellest väga kasulikku. Ja neid kasutatakse kasutamiseks otse konsoolist või kaudselt, sisestades need skripti (automatiseeritud ülesanne).

Järgmises Shelli skriptimise postituses uurime teisi käske.

Kui soovite käsu "grep" kohta veidi rohkem teada saada, külastage seda linki "DEBIAN WikiJa kui soovite Shelli skriptimise kohta lisateavet meie enda ajaveebist, saate vaadata meie teisi selleteemalisi väljaandeid, klõpsates siin: Skriptimine FromLinuxis