Recherche de site Web

Comment utiliser Awk pour imprimer des champs et des colonnes dans un fichier


Dans cette partie de notre série de commandes Linux Awk, nous examinerons l'une des fonctionnalités les plus importantes de Awk, à savoir l'édition de champs.

Il est bon de savoir que Awk divise automatiquement les lignes de saisie qui lui sont fournies en champs, et un champ peut être défini comme un ensemble de caractères séparés des autres champs par un séparateur de champ interne.

Si vous êtes familier avec Unix/Linux ou si vous faites de la programmation shell bash, vous devez savoir ce qu'est la variable de séparateur de champ interne (IFS). Les IFS par défaut dans Awk sont la tabulation et l'espace.

Voici comment fonctionne l'idée de séparation des champs dans Awk : lorsqu'elle rencontre une ligne d'entrée, selon l'IFS défini, le premier jeu de caractères est le champ un, auquel on accède en utilisant $1<., le deuxième jeu de caractères est le champ deux, accessible à l'aide de $2, le troisième jeu de caractères est le champ trois, auquel on accède à l'aide de $3 et ainsi de suite. jusqu'au dernier jeu de caractères.

Pour mieux comprendre cette édition de champ Awk, jetons un œil aux exemples ci-dessous :

Exemple 1 : J'ai créé un fichier texte appelé tecmintinfo.txt.

vi tecmintinfo.txt
cat tecmintinfo.txt

Puis depuis la ligne de commande, j'essaie d'imprimer les champs premier, deuxième et troisième du fichier tecmintinfo.txt en utilisant la commande ci-dessous :

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt

TecMint.comisthe

À partir du résultat ci-dessus, vous pouvez voir que les caractères des trois premiers champs sont imprimés en fonction de l'IFS défini qui est l'espace :

  1. Le premier champ qui est « TecMint.com » est accessible en utilisant $1.
  2. Le champ deux qui est « est » est accessible en utilisant $2.
  3. Le champ trois, qui est « le », est accessible en utilisant $3.

Si vous avez remarqué dans la sortie imprimée, les valeurs des champs ne sont pas séparées et c'est ainsi que l'impression se comporte par défaut.

Pour afficher clairement le résultat avec un espace entre les valeurs des champs, vous devez ajouter l'opérateur (,) comme suit :

$ awk '//{print $1, $2, $3; }' tecmintinfo.txt

TecMint.com is the

Une chose importante à noter et à toujours retenir est que l'utilisation de ($) dans Awk est différente de son utilisation dans les scripts shell.

Sous les scripts shell, ($) est utilisé pour accéder à la valeur des variables tandis que dans Awk ($), il est utilisé uniquement lors de l'accès au contenu de un champ mais pas pour accéder à la valeur des variables.

Exemple 2 : Jetons un coup d'œil à un autre exemple utilisant un fichier contenant plusieurs lignes appelé my_shoping.list.

No	Item_Name		Unit_Price	Quantity	Price
1	Mouse			#20,000		   1		#20,000
2 	Monitor			#500,000	   1		#500,000
3	RAM_Chips		#150,000	   2		#300,000
4	Ethernet_Cables	        #30,000		   4		#120,000		

Supposons que vous souhaitiez imprimer uniquement le Unit_Price de chaque article de la liste de courses, vous devrez exécuter la commande ci-dessous :

$ awk '//{print $2, $3 }' my_shopping.txt 

Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000

Awk dispose également d'une commande printf qui vous aide à formater votre sortie. C'est une manière intéressante car vous pouvez voir que la sortie ci-dessus n'est pas assez claire.

Utilisation de printf pour formater la sortie du Item_Name et du Unit_Price :

$ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt 

Item_Name  Unit_Price
Mouse      #20,000
Monitor    #500,000
RAM_Chips  #150,000
Ethernet_Cables #30,000

Résumé

L'édition de champs est très importante lorsque vous utilisez Awk pour filtrer du texte ou des chaînes, elle vous aide à obtenir des données particulières dans les colonnes d'une liste. Et rappelez-vous toujours que l'utilisation de l'opérateur ($) dans Awk est différente de celle dans les scripts shell.

J'espère que l'article vous a été utile et pour toute information supplémentaire requise ou question, vous pouvez poster un commentaire dans la section commentaires.