Awk est un langage de script utilisé pour traiter ou analyser des fichiers texte. Ou nous pouvons dire que la commande awk est principalement utilisée pour regrouper des données en fonction d'une colonne ou d'un champ, ou d'un ensemble de colonnes. Il est principalement utilisé pour rapporter des données de manière utile. Il utilise également les blocs de début et de fin pour traiter les données.
AWK signifie "Aho, Weinberger et Kernighan"
Dans ce tutoriel, nous allons apprendre la commande awk avec des exemples pratiques.
Syntaxe de awk
# awk 'pattern {action}' fichier-entrée> fichier-sortie
Prenons un fichier d'entrée avec les données suivantes
$ cat awk_file Name,Marks,Max Marks Ram,200,1000 Shyam,500,1000 Ghyansham,1000 Abharam,800,1000 Hari,600,1000 Ram,400,1000
Maintenant, plongeons dans des exemples pratiques de la commande awk.
1) Imprimer toutes les lignes d'un fichier
Par défaut, awk imprime toutes les lignes d'un fichier, donc pour imprimer chaque ligne du fichier créé ci-dessus, utilisez la commande ci-dessous :
$ awk '{print;}' awk_file Name,Marks,Max Marks Ram,200,1000 Shyam,500,1000 Ghyansham,1000 Abharam,800,1000 Hari,600,1000 Ram,400,1000
Remarque : Dans la commande awk '{print;}' est utilisé pour imprimer tous les champs avec leurs valeurs.
2) N'imprimer que des champs spécifiques tels que 2e et 3e
Dans la commande awk, nous utilisons le symbole $ (dollar) suivi du numéro de champ pour imprimer les valeurs de champ. Dans l'exemple ci-dessous, nous imprimons le champ 2 (c'est-à-dire les marques) et le champ 3 (c'est-à-dire les marques maximales)
$ awk -F "," '{print $2, $3;}' awk_file Marks Max Marks 200 1000 500 1000 1000 800 1000 600 1000 400 1000
Dans la commande ci-dessus, nous avons utilisé l'option -F "," qui spécifie que la virgule (,) est le séparateur de champ dans le fichier.
3) Imprimez les lignes qui correspondent au motif
Je veux imprimer les lignes qui contiennent le mot "Hari &Ram", lancez
$ awk '/Hari|Ram/' awk_file Ram,200,1000 Hari,600,1000 Ram,400,1000
4) Comment trouver des valeurs uniques dans la première colonne du nom ?
Pour imprimer des valeurs uniques à partir de la première colonne, exécutez la commande ci-dessous awk
$ awk -F, '{a[$1];}END{for (i in a)print i;}' awk_file Abharam Hari Name Ghyansham Ram Shyam
5) Comment trouver la somme des données saisies dans une colonne particulière
Dans la commande awk, il est également possible d'effectuer une opération arithmétique basée sur la recherche, la syntaxe est indiquée ci-dessous
$ awk -F, ‘$1==”Item1″{x+=$2;}END{print x}’ awk_file
Dans l'exemple ci-dessous, nous recherchons Ram, puis nous ajoutons les valeurs du 2e champ pour le mot Ram.
$ awk -F, '$1=="Ram"{x+=$2;}END{print x}' awk_file 600
6) Comment trouver le total de tous les nombres dans une colonne
Dans la commande awk, nous pouvons également calculer la somme de tous les nombres dans une colonne d'un fichier. Dans l'exemple ci-dessous, nous calculons la somme de tous les nombres des 2e et 3e colonnes.
$ awk -F"," '{x+=$2}END{print x}' awk_file 3500 $ awk -F"," '{x+=$3}END{print x}' awk_file 5000
7) Comment trouver la somme des enregistrements de groupe individuels
Par exemple, si nous considérons la première colonne, nous pouvons faire la somme pour la première colonne en fonction des éléments
$ awk -F, '{a[$1]+=$2;}END{for(i in a)print i", "a[i];}' awk_file Abharam, 800 Hari, 600 Name, 0 Ghyansham, 1000 Ram, 600 Shyam, 500
8) Trouvez la somme de toutes les entrées de colonnes spécifiques et ajoutez-la à la fin du fichier
Comme nous en avons déjà discuté, la commande awk peut faire la somme de tous les nombres d'une colonne, donc pour ajouter la somme de la colonne 2 et de la colonne 3 à la fin du fichier, exécutez
$ awk -F"," '{x+=$2;y+=$3;print}END{print "Total,"x,y}' awk_file Name,Marks,Max Marks Ram,200,1000 Shyam,500,1000 Ghyansham,1000 Abharam,800,1000 Hari,600,1000 Ram,400,1000 Total,3500 5000
9) Comment trouver le nombre d'entrées dans chaque colonne en fonction de la première colonne
$ awk -F, '{a[$1]++;}END{for (i in a)print i, a[i];}' awk_file Abharam 1 Hari 1 Name 1 Ghyansham 1 Ram 2 Shyam 1
10) Comment imprimer uniquement le premier enregistrement de chaque groupe
Pour n'imprimer que le premier de chaque groupe, exécutez la commande ci-dessous awk
$ awk -F, '!a[$1]++' awk_file Name,Marks,Max Marks Ram,200,1000 Shyam,500,1000 Ghyansham,1000 Abharam,800,1000 Hari,600,1000
AWK Commencer le bloc
La syntaxe du bloc BEGIN est
$ awk ‘BEGIN{awk initializing code}{actual AWK code}’ File-Name
Créons un fichier de données avec le contenu ci-dessous
11) Comment remplir les noms de chaque colonne avec leurs données correspondantes
$ awk 'BEGIN{print "Names\ttotal\tPPT\tDoc\txls"}{printf "%-s\t%d\t%d\t%d\t%d\n", $1,$2,$3,$4,$5}' datafile
12) Comment changer le séparateur de champs
Comme nous pouvons le voir, l'espace est le séparateur de champs dans le fichier de données, dans l'exemple ci-dessous, nous allons changer le séparateur de champs de l'espace à "|"
$ awk 'BEGIN{OFS="|"}{print $1,$2,$3,$4,$5}' datafile
C'est tout ce tutoriel, j'espère que vous l'avez trouvé instructif. Veuillez partager vos commentaires et vos questions dans la section des commentaires ci-dessous.