Vous avez trouvé cette page utile, Vous pouvez l'obtenir ici au format kindle (amazon).
| -F | Spécifie les séparateurs de champs | |
| -v | Définie une variable utilisée à l'intérieur du programme. | |
| -f | Les commandes sont lu à partir d'un fichier. |
On accède à chaque champs de l'enregistrement courant par la variable $1, $2, ... $NF. $0 correspond à l'enregistrement complet. La variable NF contient le nombre de champs de l'enregistrement courant, la variable $NF correspond donc au dernier champs.
awk -F ":" '{ $2 = "" ; print $0 }' /etc/passwd |
imprime chaque ligne du fichier /etc/passwd après avoir effacé le deuxième champs |
awk 'END {print NR}' fichier |
imprime le nombre total de lignes du fichiers |
awk '{print $NF}' fichier |
imprime le dernier champs de chaque ligne |
who | awk '{print $1,$5}' |
imprime le login et le temps de connexion. |
awk 'length($0)>75 {print}' fichier |
imprime les lignes de plus de 75 caractères. (print équivaur à print $0) |
| Variable | Signification | Valeur par défaut |
|---|---|---|
| ARGC | Nombre d'arguments de la ligne de commande | - |
| ARGV | tableau des arguments de la ligne de commnde | - |
| FILENAME | nom du fichier sur lequel on applique les commandes | - |
| FNR | Nombre d'enregistrements du fichier | - |
| FS | separateur de champs en entrée | " " |
| NF | nombre de champs de l'enregistrement courant | - |
| NR | nombre d'enregistrements deja lu | - |
| OFMT | format de sortie des nombres | "%.6g" |
| OFS | separateur de champs pour la sortie | " " |
| ORS | separateur d'enregistrement pour la sortie | "\n" |
| RLENGTH | longueur de la chaine trouvée | - |
| RS | separateur d'enregistrement en entrée | "\n" |
| RSTART | debut de la chaine trouvée | - |
| SUBSEP | separateur de subscript | "\034" |
awk 'BEGIN { print "Verification des UID et GID dans le fichier /etc/passwd";
FS=":"}
$3 !~ /^[0-9][0-9]*$/ {print "UID erreur ligne "NR" :\n"$0 }
$4 !~ /^[0-9][0-9]*$/ {print "GID erreur ligne "NR" :\n"$0 }
END { print "Fin" }
' /etc/passwd
Résultat :
awk 'BEGIN { print "Verification du fichier /etc/passwd pour ...";
print "- les utilisateurs avec UID = 0 " ;
print "- les utilisateurs avec UID >= 60000" ;
FS=":"}
$3 == 0 { print "UID 0 ligne "NR" :\n"$0 }
$3 >= 60000 { print "UID >= 60000 ligne "NR" :\n"$0 }
END { print "Fin" }
' /etc/passwd
Résultat :
awk 'BEGIN { print "Verification du fichier /etc/group";
print "le groupe 20 s'appelle t-il bien users ? " ;
FS=":"}
$1 == "users" && $3 ==20 { print "groupe "$1" a le GID "$3" !" }
END { print "Fin" }
' /etc/group
Résultat :
awk 'NR == 5 , NR == 10 {print NR" : " $0 }' fichier
Imprime de la ligne 5 à la ligne 10 , chaque ligne précédée par son numéro
| Nom des fonctions | signification |
|---|---|
| atan2(y,x) | arctangente de x/y en redians dans l'interval -pi pi |
| cos(x) | cosinus (en radians) |
| exp(x) | exponentielle e à la puissance x |
| int(x) | valeur entière |
| log(x) | logarythme naturel |
| rand() | nombre aléatoire entre 0 et 1 |
| sin(x) | sinus (en radians) |
| sqrt(x) | racine carrée |
| srand(x) | reinitialiser le générateur de nombre aléatoire |
| Nom des fonctions | signification | |
|---|---|---|
| gsub(r,s,t) | sur la chaine t, remplace toutes les occurance de r par s | |
| index(s,t) | retourne la position la plus à gauche de la chaine t dans la chaine s | |
| length(s) | retourne la longueur de la chaine s | |
| match(s,r) | retourne l'index ou s correspond à r et positionne RSTART et RLENTH | |
| split(s,a,fs) | split s dans le tableau a sur fs, retourne le nombre de champs | |
| sprintf(fmt,liste expressions) | retourne la liste des expressions formattée suivant fmt | |
| sub(r,s,t) | comme gsub, mais remplce uniquement la première occurence | |
| substr(s,i,n) | retourne la sous chaine de s commencant en i et de taille n |
Rappel : Les champs de la ligne courant sont : $1, $2, ..., $NF
La ligne entière est $0
Ces variables ont les memes propriétés que Les autres variables. Elles peuvent
etre reaffectées. Quand $0 est modifiées, les variables $1,$2 ... sont aussi
modifiées ainsi que NF.Inversement si une des variables $i est modifiées, $0
est mise à jour.
Les champs peuvent etre specifiés par des expressions, comme $(NF-1) pour l'avant
dernier champs.
awk 'BEGIN { FS=":" ;
OFS=":"}
$NF != "/bin/ksh" { print $0 }
$3 == "/bin/ksh" && NF == 7 { $7 = "/bin/posix/sh" ;
print $0 } '
/etc/passwd > /etc/passwd.new
Résultat :
Il n'y a pas d'opérateur de concaténation, il faut simplement lister les chaines
à concaténer.
awk '{ print NR " : " $0 }' fichier
Résultat : awk 'BEGIN { FS=":" ;
OFS=":" ;
print " Run Level 2 : Liste des actions "}
$2 ~ /2/ { print "Keyword <<"$3">>, \n Tache <<"$4">>" }
$2 == "" { print "Keyword <<"$3">>, \n Tache <<"$4">>" }
' /etc/inittab > /etc/passwd.new
Résultat :
| specifieur | signification |
| d | nombre decimal |
| s | chaine de caractères |
| specifieur | signification |
| - | expression justifiée à gauche |
| largeur | largeur d'affichage |
| .precision | longueur maximale d'une chaine de caracteres ou nombre de decimales |
| awk ' { print NR " :" , $0 > "fich.numerote" } ' fichier | le fichier fich.numerote contient le fichier fichier avec
les lignes numérotées
|
| awk ' { printf "%3d : %s " , NR , $0 > "fich.numerote" } ' fichier | le fichier fich.numerote contient le fichier fichier avec
les lignes numérotées sur 3 caractères
|
awk 'BEGIN { print "Mémorisation de votre fichier " FILENAME }
{memfile [NR] = $0 }
END { for ( i = NR ; i >= 1 ; i-- ) {
print i ":" memfile[i]
}
print "Fin"
} ' fichier
Résultat :
awk ' NF > 0 {
for (i=1;i<=NF;i++) {
if ( $i ~ /^[0-9a-zA-Z][0-9a-zA-Z]*$/ ) {
index[$i] = index[$i] ";" NR "," i " " ;
index["total"]++ ;
}
}
}
END { x="total" ;
printf("%s mots detectés = %d\n",x,index[x]);
} ' fichier
Résultat :
for (var in tableau) action
awk ' NF > 0 {
for (i=1;i<=NF;i++) {
if ( $i ~ /^[0-9a-zA-Z][0-9a-zA-Z]*$/ ) {
index[$i] = index[$i] ";" NR "," i " " ;
index["total"]++ ;
}
}
}
END {
for ( x in index ) {
if ( x != "total" )
printf("%-20s\t%s\n",x,index[x]) | "sort -f "
}
x="total";
printf("%s mots detectés = %d\n",x,index[x]);
} ' fichier
Résultat :
awk 'BEGIN { print "Mémorisation de votre fichier " FILENAME
SUBSEP=":"
}
{ for ( i=1 ; i <=NF ; i++ ) {
memfields[ NR , i ] = $i
}
}
END { for ( i in memfields ) {
print i ":" memfields[i] | "sort -n -t: "
}
print "Fin"
} ' fichier
Résultat :
Obtenir l'aide mémoire Unix au format pdf
© Isabelle Vollant
(http://www.shellunix.com)
mise à jour le 30/07/12