Awk: apprentissage du script Shell à l'aide de la commande de terminal awk
La commande "awk" dans les systèmes d'exploitation libres de type GNU / Linux est une commande très puissante, qui nous aide à avoir un meilleur contrôle lors du traitement des données provenant d'autres commandes ou commandes de commande. Le nom AWK dérive des initiales des noms de famille de ses auteurs: Alfred Aho, peter Weinberger et Brian KErnighan.
Cette commande fournit un langage de script pour le traitement de texte avec lequel nous pouvons: Définir des variables, utiliser des chaînes et des opérateurs arithmétiques, utiliser le contrôle de flux et des cycles, et générer des rapports formatés. En fait, Awk est plus qu'une simple commande de traitement de motifs, c'est tout un langage d'analyse sémantique.
Introduction à la commande "awk"
AWK a été l'un des premiers utilitaires de console très populaires à gérer (gérer / extraire) les données en maximisant les fonctionnalités des canaux UNIX. Le langage fourni par cet utilitaire est actuellement un standard dans presque tous les systèmes d'exploitation modernes de type UNIX, à tel point qu'il fait partie des spécifications UNIX de base, c'est pourquoi il est généralement déjà installé dans la plupart d'entre eux par défaut.
Sa syntaxe la plus courante est: awk 'program' files et où 'program' peut être: pattern {action} pattern {action}. La commande lit l'entrée de fichier une ligne à la fois. Chaque ligne est comparée à chaque modèle dans l'ordre; pour chaque motif qui correspond à la ligne, l'action correspondante est exécutée.
Un exemple simple comme:
awk -F: '$1=="root" {print}' /etc/passwd
il demande le premier champ s'il s'agit de la racine de chaque ligne dans / etc / passwd et l'affiche en considérant le ":" avec -F: comme séparateur de champ.
Exemples pratiques
Liste des commandes les plus utilisées
Consultez une liste basée sur l'historique du terminal système, du plus fréquemment utilisé au moins.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
exemple:

Graphique (tableau) avec le nombre de connexions pour chaque hôte
Créez un graphique textuel ASCII qui montre le nombre total de connexions de l'hôte à chaque adresse 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:

Liste des répertoires par taille
Imprimer à l'écran la liste des répertoires du chemin courant du plus grand au plus petit en affichant les étiquettes correspondant à leur taille à l'aide des lettres: g, m et 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:

Afficher le trafic d'une interface réseau
Affichez en ligne la consommation de données entrantes et sortantes en kilo-octets (Ko) pour une interface réseau spécifiée.
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 une série de numéros de fibonacci
Créez une liste de nombres de quantité X suivant un modèle de fibonacci avec 2 nombres de base à construire.
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
exemple:

Liste graphique de la structure des fichiers par taille
Obtenez une liste de tous les dossiers à la racine du système d'exploitation avec le graphique (barres) et la représentation numérique en pourcentage de leur taille.
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:

Répertorier un résumé des types de fichiers dans un répertoire
Afficher une liste des types de fichiers contenus dans un répertoire avec le nombre de fichiers qui y correspondent.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
exemple:

Ces exemples de lignes de commande utilisant la commande awk, j'espère que vous le trouverez très utile. Et ils servent à être utilisés directement depuis la console ou indirectement en les insérant dans un script (tâche automatisée).
Dans le prochain article sur les scripts Shell, nous explorerons d'autres commandes.
Si vous voulez en savoir un peu plus sur la commande "grep", visitez ce lien "DEBIAN Wiki"Et si vous souhaitez en savoir plus sur les scripts Shell dans notre propre blog, vous pouvez consulter nos autres publications sur le sujet, en cliquant ici: Script dans FromLinux
