Comment diviser un fichier de chaînes avec awk

Comment diviser un fichier de chaînes avec awk
La commande Linux Awk (abrégé 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:
  • Analyser les fichiers, ligne par ligne.
  • Divisez chaque ligne en champs / colonnes.
  • Spécifiez les modèles et comparez les lignes du fichier à ces modèles
  • Effectuer diverses actions sur les lignes qui correspondent à un modèle donné

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 effectué les exemples de cet article sur un système Debian 10 Buster, mais ils peuvent être facilement reproduits sur la plupart des distros Linux.

L'exemple de fichier que nous utiliserons

L'exemple de fichiers de chaînes que nous utiliserons afin de démontrer l'utilisation de la commande awk est la suivante:

C'est ce que chaque colonne du fichier de l'exemple indique:

  • La première colonne contient le nom des employés / enseignants dans une école
  • La deuxième colonne contient le sujet que l'employé enseigne
  • La troisième colonne indique si l'employé est professeur ou professeur adjoint
  • La quatrième colonne contient le salaire de l'employé

Exemple 1: Utilisez 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 modèle que AWK devrait imprimer, donc la commande est censée appliquer l'action «imprimer» à 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 motif donné

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

Syntaxe:

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

Exemple:

Dans l'exemple de fichier, si je souhaite imprimer uniquement les lignes qui contiennent la variable «B», je peux utiliser la commande suivante:

$ awk '/ b / print' samptample_file.SMS

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

$ awk '/ professeur / print' Sample_file.SMS

La commande imprime uniquement 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 awk pour imprimer uniquement des colonnes spécifiques du fichier. Awk traite tous les mots, séparés par l'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, etc. 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 imprimera uniquement la première colonne (nom) et la deuxième colonne (sujet) de mon exemple de fichier:

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

Exemple 4: Utilisez AWK pour compter et imprimer le nombre de lignes dans lesquelles un motif est adapté

Vous pouvez dire à AWK de compter le nombre de lignes dans lesquelles un motif spécifié est correspondant, puis de sortir 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 qui enseignent le sujet «anglais». Par conséquent, je vais dire à la commande awk de correspondre au modèle «anglais» et d'imprimer le nombre de lignes dans lesquelles ce modèle est apparié.

$ awk '/ anglais / ++ cnt end print "count =", cnt' samptample_file.SMS

Le nombre ici suggère que 2 personnes enseignent l'anglais à partir des exemples de dossiers de fichiers.

Exemple 5: Utilisez AWK pour imprimer uniquement les lignes avec plus qu'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 imprime uniquement les lignes avec plus, voire moins que le nombre de caractères, nous pouvons utiliser la fonction de longueur de la manière suivante:

Pour l'impression de lignes avec des caractères supérieurs à un nombre:

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

Pour l'impression de 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 imprimera uniquement les lignes de mon exemple de fichier qui ont des caractères plus de 30:

$ awk 'longueur ($ 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. C'est ainsi que vous pouvez l'utiliser:

Nom de fichier CRITERIA_TO_PRINT ".TXT> OutputFile.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> Employee_Names.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 conserver un décompte des champs dans l'enregistrement de saisie actuel. Ici, nous utiliserons la commande NF pour imprimer uniquement les lignes non vides du fichier:

$ awk 'nf> 0' Sample_file.SMS

De toute évidence, vous pouvez utiliser la commande suivante pour imprimer les lignes vides:

$ awk 'nf < 0' sample_file.txt

Exemple 8: Utilisez AWK pour compter les lignes totales dans un fichier

Une autre fonction intégrée appelée NR conserve le nombre du nombre d'enregistrements d'entrée (généralement les lignes) d'un fichier donné. Vous pouvez utiliser cette fonction dans AWK comme suivant pour compter le nombre de lignes dans un fichier:

$ awk 'end print nr' samptample_file.SMS

C'était les informations de base dont vous avez besoin pour commencer par la séparation des fichiers avec la commande awk. Vous pouvez utiliser la combinaison de ces exemples pour récupérer des informations plus significatives de votre fichier de chaînes via awk.