Awk

Comment diviser un fichier de chaînes avec Awk

Comment diviser un fichier de chaînes avec Awk
La commande Linux awk (abrégée des noms des développeurs ; Aho, Weinberger et Kernighan) est un excellent moyen de traiter et d'analyser un fichier de chaînes. Pour que les fichiers soient plus informatifs, ils doivent être organisés sous forme de lignes et de colonnes. Ensuite, vous pouvez utiliser awk sur ces fichiers pour :

Dans cet article, nous expliquerons l'utilisation de base de la commande awk et comment elle peut être utilisée pour diviser un fichier de chaînes. Nous avons exécuté les exemples de cet article sur un système Debian 10 Buster, mais ils peuvent être facilement répliqués sur la plupart des distributions Linux.

Le fichier exemple que nous utiliserons

L'exemple de fichier de chaînes que nous utiliserons pour démontrer l'utilisation de la commande awk est le suivant :

Voici ce qu'indique chaque colonne du fichier exemple :

Exemple 1 : Utiliser Awk pour imprimer toutes les lignes d'un fichier

L'impression de chaque ligne d'un fichier spécifié est le comportement par défaut de la commande awk. Dans la syntaxe suivante de la commande awk, nous ne spécifions aucun motif que awk doit imprimer, donc la commande est censée appliquer l'action "print" à toutes les lignes du fichier.

Syntaxe:

$ awk 'print' nom de fichier.SMS

Exemple:

Dans cet exemple, je dis à la commande awk d'imprimer le contenu de mon exemple de fichier, ligne par ligne.

$ awk 'print' sample_file.SMS

Exemple 2 : Utilisez awk pour imprimer uniquement les lignes qui correspondent à un modèle donné

Avec awk, vous pouvez spécifier un motif et la commande n'imprimera que les lignes correspondant à ce motif.

Syntaxe:

$ awk '/pattern_to_be_matched/ print' nom de fichier.SMS

Exemple:

À partir de l'exemple de fichier, si je veux imprimer uniquement la ou les lignes contenant la variable 'B', je peux utiliser la commande suivante :

$ awk '/B/ print' sample_file.SMS

Pour rendre l'exemple plus significatif, permettez-moi d'imprimer uniquement les informations sur les employés qui sont des « professeurs ».

$ awk '/professor/ print' sample_file.SMS

La commande n'imprime que les lignes/entrées qui contiennent la chaîne « professeur », nous avons donc des informations plus précieuses dérivées des données.

Exemple 3. Utilisez awk pour diviser le fichier afin que seuls des champs/colonnes spécifiques soient imprimés

Au lieu d'imprimer le fichier entier, vous pouvez faire en sorte que awk n'imprime que des colonnes spécifiques du fichier. Awk traite tous les mots, séparés par un espace blanc, dans une ligne comme un enregistrement de colonne par défaut. Il stocke l'enregistrement dans une variable $N. Où $1 représente le premier mot, $2 stocke le deuxième mot, $3 le quatrième, et ainsi de suite. $0 stocke toute la ligne afin que la ligne who soit imprimée, comme expliqué dans l'exemple 1.

Syntaxe:

$ awk 'print $N,… .' nom de fichier.SMS

Exemple:

La commande suivante n'imprimera que la première colonne (nom) et la deuxième colonne (sujet) de mon exemple de fichier :

$ awk 'print $1, $2' sample_file.SMS

Exemple 4 : utilisez Awk pour compter et imprimer le nombre de lignes dans lesquelles un motif correspond

Vous pouvez dire à awk de compter le nombre de lignes dans lesquelles un modèle spécifié est mis en correspondance, puis de générer ce "compte".

Syntaxe:

$ awk '/pattern_to_be_matched/++cnt END print "Count = ", cnt'
nom de fichier.SMS

Exemple:

Dans cet exemple, je veux compter le nombre de personnes enseignant la matière « anglais ». Par conséquent, je dirai à la commande awk de faire correspondre le motif "anglais" et d'imprimer le nombre de lignes dans lesquelles ce motif correspond.

$ awk '/english/++cnt END print "Count = ", cnt' sample_file.SMS

Le décompte ici suggère que 2 personnes enseignent l'anglais à partir des exemples d'enregistrements du fichier.

Exemple 5 : utilisez awk pour imprimer uniquement les lignes avec plus d'un nombre spécifique de caractères

Pour cette tâche, nous utiliserons la fonction awk intégrée appelée "longueur". Cette fonction renvoie la longueur de la chaîne d'entrée. Ainsi, si nous voulons que awk n'affiche que les lignes avec plus, ou même moins que, le nombre de caractères, nous pouvons utiliser la fonction length de la manière suivante :

Pour imprimer des lignes avec des caractères supérieurs à un nombre :

$ awk 'longueur($0) > n' nom de fichier.SMS

Pour imprimer des lignes avec des caractères inférieurs à un nombre :

$ awk 'longueur($0) < n' filename.txt

Où n est le nombre de caractères que vous souhaitez spécifier pour une ligne.

Exemple:

La commande suivante n'imprimera que les lignes de mon exemple de fichier contenant plus de 30 caractères :

$ awk 'length($0) > 30' sample_file.SMS

Exemple 6 : Utilisez awk pour enregistrer la sortie de la commande dans un autre fichier

En utilisant l'opérateur de redirection '>', vous pouvez utiliser la commande awk pour imprimer sa sortie dans un autre fichier. Voici comment vous pouvez l'utiliser :

$ awk 'criteria_to_print" nom de fichier.txt > fichier de sortie.SMS

Exemple:

Dans cet exemple, j'utiliserai l'opérateur de redirection avec ma commande awk pour imprimer uniquement les noms des employés (colonne 1) dans un nouveau fichier :

$ awk 'print $1' sample_file.txt > nom_employé.SMS

J'ai vérifié via les commandes cat que le nouveau fichier ne contient que les noms des employés.

Exemple 7 : Utilisez awk pour imprimer uniquement les lignes non vides d'un fichier

Awk a des commandes intégrées que vous pouvez utiliser pour filtrer la sortie. Par exemple, la commande NF est utilisée pour garder un compte des champs dans l'enregistrement d'entrée courant. Ici, nous utiliserons la commande NF pour n'imprimer que les lignes non vides du fichier :

$ awk 'NF > 0' sample_file.SMS

Evidemment, vous pouvez utiliser la commande suivante pour imprimer les lignes vides :

$ awk 'NF < 0' sample_file.txt

Exemple 8 : Utilisez awk pour compter le nombre total de lignes dans un fichier

Une autre fonction intégrée appelée NR compte le nombre d'enregistrements d'entrée (généralement des lignes) d'un fichier donné. Vous pouvez utiliser cette fonction dans awk comme suit pour compter le nombre de lignes dans un fichier :

$ awk 'END print NR ' sample_file.SMS

Ce sont les informations de base dont vous avez besoin pour commencer à diviser des fichiers avec la commande awk. Vous pouvez utiliser la combinaison de ces exemples pour extraire des informations plus significatives de votre fichier de chaînes via awk.

Bataille pour Wesnoth 1.13.6 Développement publié
Bataille pour Wesnoth 1.13.6 publiée le mois dernier, est la sixième version de développement de la 1.13.x series et il apporte un certain nombre d'am...
Comment installer League Of Legends sur Ubuntu 14.04
Si vous êtes fan de League of Legends, alors c'est l'occasion pour vous de tester League of Legends. Notez que LOL est pris en charge sur PlayOnLinux ...
Installez le dernier jeu de stratégie OpenRA sur Ubuntu Linux
OpenRA est un moteur de jeu de stratégie en temps réel libre/gratuit qui recrée les premiers jeux Westwood comme le classique Command & Conquer: Red A...