GNU/Linux >> Tutoriels Linux >  >> Linux

Les tableaux AWK expliqués avec 5 exemples pratiques

Le langage de programmation Awk prend en charge les tableaux. Dans le cadre de notre série d'exemples awk en cours, nous avons vu des variables définies par l'utilisateur awk et des variables intégrées awk. Les tableaux sont une extension des variables. Les tableaux sont des variables qui contiennent plus d'une valeur. Semblables aux variables, les tableaux ont également des noms. Dans certains langages de programmation, les tableaux doivent être déclarés, afin que la mémoire soit allouée aux tableaux. En outre, les index de tableau sont généralement des nombres entiers, comme array[1], array[2] etc.,

Tableau associatif Awk

Awk ne prend en charge que les tableaux associatifs. Les tableaux associatifs ressemblent aux tableaux traditionnels, sauf qu'ils utilisent des chaînes comme index plutôt que des nombres. Lorsque vous utilisez un tableau associatif, vous pouvez imiter un tableau traditionnel en utilisant une chaîne numérique comme index.

Syntax:

arrayname[string]=value

Dans la syntaxe awk ci-dessus :

  • nom du tableau est le nom du tableau.
  • chaîne est l'indice d'un tableau.
  • valeur est n'importe quelle valeur assignée à l'élément du tableau.

Accéder aux éléments du tableau AWK

Si vous souhaitez accéder à un élément particulier dans un tableau, vous pouvez accéder via son index - arrayname[index], qui vous donne la valeur attribuée dans cet index.

Si vous souhaitez accéder à tous les éléments du tableau, vous pouvez utiliser une boucle pour parcourir tous les index d'un tableau, comme indiqué ci-dessous.

Syntax:

for (var in arrayname)
actions

Dans la syntaxe awk ci-dessus :

  • var est n'importe quel nom de variable
  • dans est un mot clé
  • nom du tableau est le nom du tableau.
  • action sont la liste des déclarations à effectuer. Si vous souhaitez effectuer plusieurs actions, elles doivent être placées entre accolades.

Cette boucle exécute la liste des actions pour chaque valeur différente qui a été utilisée comme index dans le tableau avec la variable var définie sur cet index.

Supprimer un élément du tableau AWK

Si vous souhaitez supprimer un élément dans un index particulier d'un tableau, utilisez l'instruction awk delete. Une fois que vous avez supprimé un élément d'un tableau awk, vous ne pouvez plus obtenir cette valeur.

Syntax:

delete arrayname[index];

La commande loop ci-dessous supprime tous les éléments d'un tableau. Il n'y a pas d'instruction unique pour supprimer tous les éléments d'un tableau. Vous devez parcourir la boucle et supprimer chaque élément du tableau à l'aide de l'instruction awk delete.

for (var in array)
     delete array[var]

5 exemples pratiques de tableaux Awk

Tous les exemples donnés ci-dessous utilisent le fichier Iplogs.txt illustré ci-dessous. Cet exemple de fichier texte contient la liste des adresses IP demandées par le serveur de passerelle. Cet exemple de fichier Iplogs.txt contient des données au format suivant :

[date] [time] [ip-address] [number-of-websites-accessed]
$ cat Iplogs.txt
180607 093423	123.12.23.122 133
180607 121234	125.25.45.221 153
190607 084849   202.178.23.4 44
190607 084859   164.78.22.64 12
200607 012312	202.188.3.2 13
210607 084849   202.178.23.4 34
210607 121435	202.178.23.4 32
210607 132423	202.188.3.2 167

Exemple 1. Répertorier toutes les adresses IP uniques et le nombre de fois qu'elles ont été demandées

$ awk '{
> Ip[$3]++;
> }
> END{
> for (var in Ip)
> print var, "access", Ip[var]," times"
> }
> ' Iplogs.txt
125.25.45.221 access 1  times
123.12.23.122 access 1  times
164.78.22.64 access 1  times
202.188.3.2 access 2  times
202.178.23.4 access 3  times

Dans le script ci-dessus :

  • Le troisième champ ($3) est une adresse IP. Ceci est utilisé comme index d'un tableau appelé Ip.
  • Pour chaque ligne, il incrémente la valeur de l'index d'adresse IP correspondant.
  • Enfin, dans la section END, tout l'index sera la liste des adresses IP uniques et ses valeurs correspondantes sont le nombre d'occurrences.

Exemple 2. Répertoriez toutes les adresses IP et calculez le nombre de sites auxquels elles ont accédé

Le dernier champ du fichier Iplogs.txt est le nombre de sites auxquels chaque adresse IP a accédé à une date et une heure particulières. Le script ci-dessous génère le rapport qui contient la liste des adresses IP et le nombre de fois qu'il a demandé la passerelle et le nombre total de sites auxquels il a accédé.

$cat ex2.awk
BEGIN {
print "IP Address\tAccess Count\tNumber of sites";
}
{
Ip[$3]++;
count[$3]+=$NF;
}
END{
for (var in Ip)
	print var,"\t",Ip[var],"\t\t",count[var];
}

$ awk -f ex2.awk Iplogs.txt
IP Address	Access Count	Number of sites
125.25.45.221 	 1 		 153
123.12.23.122 	 1 		 133
164.78.22.64 	 1 		 12
202.188.3.2 	 2 		 180
202.178.23.4 	 3 		 110

Dans l'exemple ci-dessus :

  • Il a deux tableaux. L'index pour les deux tableaux est le même - qui est l'adresse IP (troisième champ).
  • Le premier tableau nommé "Ip" contient une liste d'adresses IP uniques et son nombre d'occurrences. Le deuxième tableau appelé "count" a l'adresse IP comme index et sa valeur sera le dernier champ (nombre de sites), donc chaque fois que l'adresse IP arrive, il continue d'ajouter le dernier champ.
  • Dans la section END, il parcourt toutes les adresses IP et imprime l'adresse IP et le nombre d'accès à partir du tableau appelé Ip et le nombre de sites à partir du nombre de tableaux.

Exemple 3. Identifier le jour d'accès maximal

$ cat ex3.awk
{
date[$1]++;
}
END{
for (count in date)
{
	if ( max < date[count] ) {
		max = date[count];
		maxdate = count;
	}

}
print "Maximum access is on", maxdate;
}

$ awk -f ex3.awk Iplogs.txt
Maximum access is on 210607

Dans cet exemple :

  • le tableau nommé "date" a la date comme index et le nombre d'occurrences comme valeur du tableau.
  • max est une variable qui a la valeur count et utilisée pour trouver la date qui a le nombre max.
  • maxdate est une variable qui a la date pour laquelle le nombre est maximum.

Exemple 4. Inverser l'ordre des lignes dans un fichier

$ awk '{ a[i++] = $0 } END { for (j=i-1; j>=0;) print a[j--] }' Iplogs.txt
210607 132423	202.188.3.2 167
210607 121435	202.178.23.4 32
210607 084849   202.178.23.4 34
200607 012312	202.188.3.2 13
190607 084859   164.78.22.64 12
190607 084849   202.178.23.4 44
180607 121234	125.25.45.221 153
180607 093423	123.12.23.122 133

Dans cet exemple,

  • Il commence par enregistrer toutes les lignes du tableau "a".
  • Lorsque le programme a fini de traiter toutes les lignes, Awk exécute le bloc END { }.
  • Le bloc END boucle sur les éléments du tableau 'a' et imprime les lignes enregistrées de manière inversée.

Exemple 5. Supprimez les lignes en double et non consécutives à l'aide de awk

$ cat > temp
foo
bar
foo
baz
bar

$ awk '!($0 in array) { array[$0]; print }' temp
foo
bar
baz

Dans cet exemple :

  • Awk lit chaque ligne du fichier "temp", et en utilisant l'opérateur "in", il vérifie si la ligne actuelle existe dans le tableau "a".
  • Si elle n'existe pas, elle stocke et imprime la ligne courante.

Lecture recommandée

Sed et Awk 101 Hacks, par Ramesh Natarajan . Je passe plusieurs heures par jour sur un environnement UNIX / Linux à gérer des fichiers texte (fichiers de données, de configuration et de journalisation). J'utilise Sed et Awk pour tout mon travail de manipulation de texte. Sur la base de mon expérience Sed et Awk, j'ai écrit Sed and Awk 101 Hacks eBook qui contient 101 exemples pratiques sur diverses fonctionnalités avancées de Sed et Awk qui amélioreront votre vie UNIX / Linux. Même si vous utilisez Sed et Awk depuis plusieurs années et que vous n'avez pas lu ce livre, rendez-vous service et lisez ce livre. Vous serez étonné des capacités des utilitaires Sed et Awk.


Linux
  1. Commande d'arrêt Linux expliquée avec des exemples

  2. Commande Linux Traceroute, expliquée avec des exemples

  3. Tableaux bash avec exemples

  4. Tutoriel Awk :Comprendre les variables Awk avec 3 exemples pratiques

  5. Tutoriel de référence et de déréférencement des tableaux Perl avec des exemples pratiques

w Commande expliquée avec des exemples sous Linux

La commande Wait sous Linux expliquée avec des exemples pratiques

10 exemples pratiques de regex avec grep

Explication de la commande Linux tee (avec exemples)

La commande Linux lsof expliquée avec 12 exemples pratiques

La commande Linux csplit expliquée (avec des exemples)