Awk: Aprenent Shell Scripting utilitzant la comanda de terminal awk
La comanda "awk" en els Sistemes Operatius Lliures de el tipus GNU / Linux és una ordre molt poderós, que ens ajuda a tenir un major control a l'hora de processar dades provinents d'altres ordres o ordres de comandes. El nom AWK deriva de les inicials dels cognoms dels seus autors: Alfred Aho, Pere Weinberger, i Brian Kernighan.
Aquesta comanda proporciona un llenguatge de scripting per al processament de text amb el qual podem: Definir variables, utilitzar cadenes i operadors aritmètics, utilitzar control de flux i cicles i generar informes amb format. En realitat, Awk és més que un simple comandament de processament de patrons, és tot un llenguatge de anàlisi semàntica.
Introducció a la comanda «awk»
AWK va ser una de les primeres utilitats de consola de gran popularitat a l'hora de gestionar (gestionar / extreure) dades mitjançant la maximització de la funcionalitat de les canonades de UNIX. El llenguatge proveït per aquesta utilitat actualment és un estàndard en gairebé tot els sistema operatiu tipus Unix modern, tant que és part de les Especificacions bàsiques d'UNIX, per la qual cosa se sol trobar ja instal·lat en la majoria dels mateixos per defecte.
La seva sintaxi més comú és: awk 'programa' arxius i on 'programa' pot ser: patró {acció} patró {acció}. La comanda llegeix a l'entrada d'arxius una línia al mateix temps. Cada línia es compara amb cada patró en ordre; per a cada patró que concordi amb el rengle s'efectua l'acció corresponent.
Un exemple senzill com:
awk -F: '$1=="root" {print}' /etc/passwd
pregunta pel primer camp si és root de cada línia del / etc / passwd i la imprimeix considerant com a separador de camps el «:» amb -F:.
exemples Pràctics
Llista d'ordres més usat
Veure una llista basada en l'historial de l'terminal de el Sistema ordenats des del usat amb més freqüència a l'menor.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
Exemple:

Gràfic (Taula) amb nombre de connexions per cada host
Crear un gràfic basat en text ASCII que mostri el nombre total de connexions de l'host a cada adreça IP.
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 "" }'
Exemple:

Llistat de directoris per mides
Imprimir per pantalla la llista de directoris de la ruta actual des del més gran a més petit mostrant les etiquetes corresponents a la seva mida fent servir les lletres: g, m, i 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}'
Exemple:

Mostra el tràfic d'una Interfície de Xarxa
Visualitzar en línia el consum de dades sortint i entrant en kilobytes (kb) d'una interfície de xarxa indicada.
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
Exemple:

Obtenir una sèrie numèrica fibonacci
Crear una llista de X quantitat nombres seguint un patró fibonacci donats 2 nombres bases per ser construïda.
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
Exemple:

Llistat gràfic de l'estructura d'arxiu per grandària
Obtenir un Llistat de totes les carpetes de l'arrel de sistema operatiu al costat de la representació gràfica (barres) i numèrica en forma de percentatge de la seva mida dins de la mateixa.
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"}'
Exemple:

Llistar un resum dels tipus de fitxers en un Directori
Mostra una llista dels tipus d'arxius continguts en un directori al costat de la quantitat d'arxius que li correspon.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
Exemple:

Aquests exemples de línies de comandament fent servir la comanda awk espero els sigui de gran utilitat. I els serveixin per a ser utilitzades directament des de consola o indirectament mitjançant la seva inserció en algun script (tasca automatitzada).
En la següent publicació sobre Shell Scripting explorarem altres ordres.
Si vols aprendre una mica més sobre la comanda "grep" visita aquest enllaç "wiki DEBIAN"I si desitges aprendre més sobre Shell Scripting en el nostre propi Blog, Pots donar-li un cop d'ull a les nostres altres publicacions sobre el tema, fent clic aquí: Scripting a DesdeLinux
