Awk one liner mémo

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}’

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *