Voici un memo des expression awk permettant des traitements en une ligne. C’est là que l’on voit toute la puissance de awk!
Le fichier d’exemple est fichier:
1 2 3
4 5 6
Le fichier de texte est texte:
le chat est parti le matin.
Il avait du lait dans sa gamelle.
fichier entier
Pour faire la somme des valeurs des lignes
6
15
Pour faire la somme de toutes les lignes
21
Pour connaitre le nombre de champs
6
Pour convertir un fichier msdos sous unix
traitement des colonnes
Pour afficher la dernière colonne
3
6
Pour détruire une colonne (ici la deuxième):
Pour extraire des colones
awk ‘{print $2,$3}’ fichier
2 3
5 6
Pour faire la somme d’une colonne
total: 7
Pour afficher les fichiers qui appartiennent à l’utilisateur root ou jlb:
ls -l | awk ‘$3 == « jlb » || $3 == « root » { print $9}’
Pour afficher les fichiers qui appartiennent à l’utilisateur jlb qui font plus d’1 Ko:
ls –al |awk ‘$3 == « jlb » && $5 > 1024 {print $9}’
Pour afficher les fichiers qui n’appartiennent pas à l’utilisateur oracle:
ls –al |awk ‘$3 != « oracle » {print $9}’
Pour trouver le min et le max de la première colonne
Max = 4 Min = 1
Pour afficher une colone donnée en fonction d’un critère avec | comme délémiteur:
substitutions / extractions
Pour insérer une chaine en début de chaque ligne du fichier
awk ‘{sub(/^/, »rm « );print}’ fichier
Pour substituer une chaine par une autre : gsub pour toutes les occurances, sub pour la première:
X chat est parti le matin.
Il avait du lait dans sa gamelle.
root@hercule:/root #awk ‘{gsub(/le /, »X « );print}’ texte
X chat est parti X matin.
Il avait du lait dans sa gamelle.
Pour afficher une ligne donnée
Il avait du lait dans sa gamelle.
Pour afficher une section entre deux lignes
Pour afficher la première ligne d’un fichier
Pour afficher une section entre deux expression régulières
awk ‘/begin/,/end/’
emulation de commmandes UNIX
Pour émuler la commande uniq :
awk ‘a !~ $0; {a=$0}’
Pour émuler la commande head :
le chat est parti le matin.
Pour émuler la commande grep :
le chat est parti le matin.
Pour émuler la commande grep -v:
Il avait du lait dans sa gamelle.
Pour émuler la commande wc -l:
$awk ‘ END {print NR}’
Pour émuler la commande grep avec des and:
Pour émuler la commande seq :
for i in `echo | awk ‘{ for (i=1;i<10;i++){ print i}}’`
do
echo $i
done
shell extension
Comment effectuer une opération arithmétique avec awk
echo | awk -v x=$a -v y=3 ‘{ print x/y}’
0.666667
Comment tirer un nombre aléatoirement entre 1 et 6:
echo | awk ‘{srand() ; print int(6*rand()+1)}’
Comment splitter les lignes d’un fichier:
cat /etc/passwd | awk ‘{ split($1,t, »: »); print t[1],t[2]}’
Comment afficher en couleur un texte
awk -v a= »\033[1;31m » ‘BEGIN {print a « rouge »}’
Comment lancer une commande à partir de awk
echo | awk ‘{ system(« ls ») }’
Une autre manière de faire en passant par une variable awk intermédiaire.
awk ‘BEGIN { resultat= system (« ls | grep ksh »)
echo resultat
}’
commandes magiques
Pour renommer tous les fichiers en .Old:
ls *.l | awk ‘{print « mv « $1 » « $1″.old »}’ | sh
Pour connaitre la taille totale occupée par les disques
/1024 » Mb »}’
taille total: 2783.14 Mb
Pour afficher le plus gros fichiers des sous répertoire courrants et sa taille:
3423065 hercule_061115_0000.nmon.csv
Pour afficher un nombre entier
cat lsfs | awk ‘{sum +=$5} END {printf « %.f\n »,sum}’