Outils pour utilisateurs

Outils du site


linux:scripts_awk:start

Ceci est une ancienne révision du document !


Scripts awk

Une doc sur awk : http://people.cs.uu.nl/piet/docs/nawk/nawk_toc.html

Quelques règles et bout de scripts (cf http://cli.asyd.net/home/filtres/awk)

Attention aux locales !!! (merci à Christophe Martin de la liste shell@asyd.net), autant pour le séparateur décimal (la virgule en fr) que les règles de collation min/maj :

echo 'Un test
une autre ligne' | env LANGUAGE=fr_FR.UTF-8 LANG=fr_FR.UTF-8 awk '/^[a-z]/'
Un test
une autre ligne
 
echo 'Un test
une autre ligne' | env LANGUAGE=C LANG=C awk '/^[a-z]/'
une autre ligne
 
echo '1.2 1,3'|env LC_ALL=fr_FR.UTF-8 awk '{print $1*10 " " $2*10}'
10 13
echo '1.2 1,3'|env LC_ALL=C awk '{print $1*10 " " $2*10}'
12 10

Donc, il vaut mieux assurer avec un alias du genre

alias awk='env LANGUAGE=C LANG=C LC_ALL=C LC_NUMERIC=C awk'

(LC_ALL devrait suffire, mais ça mange pas de pain…)

Syntaxe

Boucle for

ls -l | awk '{
  fich=$8;
  for (i=9;i<=NF;i++) {fich=fich" "$i};
  # on sort le nom du fichier avec ses espaces entre guillemets, puis date;heure;taille
  print "\""fich"\";"$6";"$7";"$5
}'

Exemples

Découper un fichier

Découper un fichier avec pleins de VirtualHosts en plusieurs fichiers (un par virtualhost, du nom du ServerName)

awk 'BEGIN {new = 0} 
  /<VirtualHost/ { new = 1; fout = 0; out="";} 
  /ServerName/ { fout = $2; print out > fout;new=0;} 
  {if (new>0) { out = out "\n" $0}}
  {if (fout!=0) { print $0 > fout;new=0}}' < tous_les_virtualhosts_confondus.conf
linux/scripts_awk/start.1268491471.txt.gz · Dernière modification : 13/03/2010 15:44 de daniel