Comment utiliser une variable shell dans awk ?

Merci Google encore une fois ! Je cherche depuis une bonne demi-heure comment faire pour afficher une variable shell dans awk et je tombe sur un forum ubuntu qui me donne la réponse. Je suis trop contente !

Il suffit d’utiliser l’option -v et de passer en paramètre la valeur de la variable shell que l’on souhaite utiliser.

Cf. un exemple ci-dessous :

Je parse un fichier et j’affiche la ligne qui m’intéresse ainsi que la variable shell que j’aurai créée au préalable. C’est très utile quand on manipule plusieurs fichiers et qu’on veut afficher une colonne du fichier d’origine et une colonne du fichier destination et ce en une ligne.

awk -v VAR= »$myShellVariable » ‘/^MY_PATTERN/ { print $1 « ; » VAR }’ $myFile

Source : forum Ubuntu

Comment afficher la liste des répertoires sous Linux à partir du répertoire courant ?

Depuis le répertoire courant, cela donne :

ls -Rl | egrep « ^d »

Le petit ^signifie « commence par ». On recherche donc toutes les lignes commençant par d avec la commande ls (lister). d voulant dire directory ou répertoire en français. L’option -R indique qu’il faut parcourir aussi les sous-répertoires, … c’est l’option récursive. La commande egrep est utilisée lorsqu’on veut faire des recherches avec des expressions régulières en paramètre.

Nous pouvons bien sûr rediriger les résultats dans un fichier :

ls -Rl | egrep « ^d » > /home/fatiha/listeDeTousLesRepertoires

Nous pouvons aussi facilement les compter avec la commande wc :

ls -Rl | egrep « ^d » | wc -l

Exemple sur mon ordi :

[fatiha@localhost ~]$ ls -Rl | egrep « ^d » | wc -l
2205

Vous pourrez voir apparaître quelques erreurs au cas où vous n’auriez pas le droit de lister le contenu d’un répertoire « Permission denied », exemple :

ls: cannot open directory ./Téléchargements/android-sdk-linux: Permission denied
ls: cannot open directory ./workspace/HelloFedora/bin/res/drawable-hdpi: Permission denied
ls: cannot open directory ./workspace/HelloFedora/bin/res/drawable-ldpi: Permission denied
ls: cannot open directory ./workspace/HelloFedora/bin/res/drawable-mdpi: Permission denied
ls: cannot open directory ./workspace/HelloFedora/gen/com: Permission denied

Dans ce cas, soit vous changez les droits, soit vous redirigez les erreurs lors du lancement de la ligne de commande. Cela donnerait :

ls -Rl 2>/dev/null | egrep « ^d » | wc -l

Vous souhaitez afficher uniquement le nom du répertoire, c’est possible en utilisant la commande awk et en lui disant de n’afficher que la 9e colonne :

ls -Rl 2>/dev/null | egrep « ^d » | awk ‘{ print $9 }’

Vous pouvez classer les noms par ordre alphabétique avec la commande sort :

ls -Rl 2>/dev/null | egrep « ^d » | awk ‘{ print $9 }’ | sort

Linux : Vérifier qu’un script lancé en background tourne bien

Admettons que je lance un script en arrière-plan sous Linux :

nohup myScript &

Je souhaite savoir s’il tourne correctement, dans ce cas, je lance les commandes ci-dessous.

while :

do

     ps -aux | grep 12526 | awk ‘{ print $8 }’ | grep R

     sleep 1

done

Je vais les décomposer :

  • boucle while
  • récupération de la liste des process en cours
  • filtrage selon le PID du script, exemple 12526
  • affichage de la colonne numéro 8 contenant le « process state code » (R+)
  • on fait une pause d’une seconde : sleep 1
  • filtrage selon l’état « running » du process

Voilà ce que j’obtiens toutes les secondes si mon script tourne bien :

R+

R+

R+

Pour en savoir plus, il suffit de taper un man ps sur sa console Linux.