Top 10 exemples awk

Top 10 exemples awk

20 exemples awk

De nombreux outils utilitaires existent dans le système d'exploitation Linux pour rechercher et générer un rapport à partir de données texte ou de fichier. L'utilisateur peut facilement effectuer de nombreux types de recherches, de remplacement et de signalement des tâches de génération en utilisant des commandes awk, grep et sed. awk n'est pas seulement une commande. Il s'agit d'un langage de script qui peut être utilisé à la fois à la fois terminal et fichier awk. Il prend en charge la variable, la déclaration conditionnelle, le tableau, les boucles, etc. comme les autres langues de script. Il peut lire n'importe quel contenu de fichier ligne par ligne et séparer les champs ou les colonnes en fonction d'un délimiteur spécifique. Il prend également en charge l'expression régulière pour rechercher une chaîne particulière dans le contenu du texte ou le fichier et prend des actions si une correspondance se trouve. Comment vous pouvez utiliser la commande et le script awk est affiché dans ce tutoriel en utilisant 20 exemples utiles.

Contenu:

  1. awk avec printf
  2. awk pour se séparer sur l'espace blanc
  3. awk pour changer le délimiteur
  4. awk avec des données délimitées dans l'onglet
  5. awk avec les données CSV
  6. awk regex
  7. regex insensible au boîtier awk
  8. awk avec nf (nombre de champs) variable
  9. fonction awk gensub ()
  10. Fonction awk avec rand ()
  11. Fonction définie par l'utilisateur awk
  12. awk si
  13. Variables awk
  14. tableaux awk
  15. boucle awk
  16. awk pour imprimer la première colonne
  17. awk pour imprimer la dernière colonne
  18. awk avec grep
  19. awk avec le fichier de script bash
  20. awk avec sed

Utilisation de awk avec printf

printf () La fonction est utilisée pour formater toute sortie dans la plupart des langages de programmation. Cette fonction peut être utilisée avec awk commande pour générer différents types de sorties formatées. Commande awk principalement utilisée pour n'importe quel fichier texte. Créer un fichier texte nommé employé.SMS avec le contenu indiqué ci-dessous où les champs sont séparés par tab ('\ t').

employé.SMS

1001 John Sena 40000
1002 Jafar Iqbal 60000
1003 Meher Nigar 30000
1004 Jonny Liver 70000

La commande awk suivante lira les données de employé.SMS Fichier ligne par ligne et imprimer le premier déposé après la mise en forme. Ici, "% 10s \ n"Signifie que la sortie sera de 10 caractères. Si la valeur de la sortie est inférieure à 10 caractères, les espaces seront ajoutés à l'avant de la valeur.

$ awk 'printf "% 10s \ n", $ 1' employé.SMS

Sortir:

Aller au contenu

awk pour se séparer sur l'espace blanc

Le séparateur de mots ou de champ par défaut pour diviser tout texte est un espace blanc. La commande awk peut prendre la valeur du texte comme entrée de diverses manières. Le texte d'entrée est passé de écho Commande dans l'exemple suivant. Le texte, 'J'aime la programmation'sera divisé par défaut du séparateur, espace, et le troisième mot sera imprimé en sortie.

$ echo 'j'aime la programmation' | awk 'print $ 3'

Sortir:

Aller au contenu

awk pour changer le délimiteur

La commande awk peut être utilisée pour modifier le délimiteur pour tout contenu de fichier. Supposons que vous ayez un fichier texte nommé téléphone.SMS avec le contenu suivant où ':' est utilisé comme séparateur de champ du contenu du fichier.

téléphone.SMS

+123: 334: 889: 778
+880: 1855: 456: 907
+9: 7777: 38644: 808

Exécutez la commande awk suivante pour changer le délimiteur, ':' par '-' au contenu du fichier, téléphone.SMS.

$ Cat Téléphone.SMS
$ awk '$ 1 = $ 1' fs = ":" ofs = "-" téléphone.SMS

Sortir:

Aller au contenu

awk avec des données délimitées dans l'onglet

La commande awk a de nombreuses variables intégrées qui sont utilisées pour lire le texte de différentes manières. Deux d'entre eux sont FS et De. FS est un séparateur de champ de saisie et De est des variables de séparateur de champ de sortie. Les utilisations de ces variables sont indiquées dans cette section. Créer un languette Fichier séparé nommé saisir.SMS avec le contenu suivant pour tester les utilisations de FS et De variables.

Saisir.SMS

Langue de script côté client
Langage de script côté serveur
Serveur de base de données
Serveur Web

Utilisation de la variable FS avec onglet

La commande suivante divisera chaque ligne de saisir.SMS Fichier basé sur l'onglet ('\ t') et imprimez le premier champ de chaque ligne.

$ awk 'print $ 1' fs = '\ t' entrée.SMS

Sortir:

Utilisation de la variable OFS avec onglet

La commande awk suivante imprimera le 9e et 5e champs de 'ls -l' Sortie de commande avec séparateur d'onglet après imprimer le titre de colonne "Nom" et "Taille". Ici, De la variable est utilisée pour formater la sortie par un onglet.

$ ls -l
$ ls -l | awk -v ofs = '\ t' 'begin printf "% s \ t% s \ n", "name", "size" print $ $, $ 5'

Sortir:

Aller au contenu

awk avec les données CSV

Le contenu de tout fichier CSV peut être analysé de plusieurs manières en utilisant la commande awk. Créer un fichier CSV nommé 'client.CSV'Avec le contenu suivant pour appliquer la commande awk.

client.SMS

ID, nom, e-mail, téléphone
1, Sophia, Sophia @ Yahoo.com, (862) 478-7263
2, Amelia, Amelia @ gmail.com, (530) 764-8000
3, Emma, ​​Emma @ hotmail.com, (542) 986-2390

Lecture du champ unique du fichier CSV

'-F' L'option est utilisée avec la commande awk pour définir le délimiteur pour diviser chaque ligne du fichier. La commande awk suivante imprimera le nom domaine de le consommateur.CSV déposer.

$ client Cat.CSV
$ awk -f "," 'print $ 2' client.CSV

Sortir:

Lire plusieurs champs en se combinant avec un autre texte

La commande suivante imprimera trois champs de client.CSV En combinant le texte du titre, Nom, e-mail et téléphone. La première ligne du client.CSV Le fichier contient le titre de chaque champ. NR La variable contient le numéro de ligne du fichier lorsque la commande awk analyse le fichier. Dans cet exemple, le NR la variable est utilisée pour omettre la première ligne du fichier. La sortie montrera le 2nd, 3rd et 4e champs de toutes les lignes sauf la première ligne.

$ awk -f "," 'nr> 1 print "nom:" $ 2 ", e-mail:" $ 3 ", téléphone:" $ 4' client.CSV

Sortir:

Lire le fichier CSV à l'aide d'un script awk

Le script awk peut être exécuté en exécutant un fichier awk. Comment vous pouvez créer un fichier awk et exécuter le fichier est affiché dans cet exemple. Créer un fichier nommé awkcsv.awk avec le code suivant. COMMENCER Le mot-clé est utilisé dans le script pour informer la commande awk pour exécuter le script du COMMENCER partie d'abord avant d'exécuter d'autres tâches. Ici, séparateur de champ (FS) est utilisé pour définir le délimiteur de division et 2nd et 1St Les champs seront imprimés en fonction du format utilisé dans la fonction printf ().

awkcsv.awk
Begin fs = "," printf "% 5s (% s) \ n", 2 $, $ $

Courir awkcsv.awk déposer avec le contenu de le consommateur.CSV fichier par la commande suivante.

$ awk -f awkcsv.Client awk.CSV

Sortir:

Aller au contenu

awk regex

L'expression régulière est un modèle utilisé pour rechercher n'importe quelle chaîne dans un texte. Différents types de tâches de recherche et de remplacement complexes peuvent être effectuées très facilement en utilisant l'expression régulière. Certaines utilisations simples de l'expression régulière avec la commande awk sont affichées dans cette section.

Jeu de caractères correspondant

La commande suivante correspondra au mot Idiot ou bool ou Cool avec la chaîne d'entrée et imprimer si le mot fonde. Ici, Poupée ne corresponde pas et ne pas imprimer.

$ printf "Fool \ nCool \ ndoll \ nbool" | awk '/ [fbc] ool /'

Sortir:

Recherche de chaîne au début de la ligne

'^' Le symbole est utilisé dans l'expression régulière pour rechercher n'importe quel modèle au début de la ligne. 'Linux ' Word sera recherché au début de chaque ligne du texte dans l'exemple suivant. Ici, deux lignes commencent par le texte, 'Linux'Et ces deux lignes seront affichées dans la sortie.

$ echo -e "Linux est gratuit à utiliser \ n c'est un logiciel open source \ nlinuxhint est
un site de blog populaire "| awk '/ ^ Linux /'

Sortir:

Recherche de chaîne à la fin de la ligne

'$' Le symbole est utilisé dans l'expression régulière pour rechercher n'importe quel modèle à la fin de chaque ligne du texte. 'Scénario'Le mot est recherché dans l'exemple suivant. Ici, deux lignes contiennent le mot, Scénario à la fin de la ligne.

$ echo -e "php script \ njavascript \ nvisual programmation" | awk '/ script $ /'

Sortir:

Recherche en omettant un jeu de caractères particulier

'^' Le symbole indique le démarrage du texte lorsqu'il est utilisé devant n'importe quel motif de chaîne ('/ ^… /') ou avant tout jeu de caractères déclaré par ^ […]. Si la '^' Le symbole est utilisé à l'intérieur du troisième support, [^…] Ensuite, le caractère défini à l'intérieur du support sera omis au moment de la recherche. La commande suivante recherchera tout mot qui ne commence pas par 'F' mais se terminant par 'ool'. Cool et bool sera imprimé en fonction des données du modèle et du texte.

$ printf "Fool \ nCool \ ndoll \ nbool" | awk '/ [^ f] ool /'

Sortir:

Aller au contenu

regex insensible au boîtier awk

Par défaut, l'expression régulière fait une recherche sensible à la recherche lors de la recherche de n'importe quel modèle dans la chaîne. La recherche insensible au cas peut être effectuée par la commande awk avec l'expression régulière. Dans l'exemple suivant, baisser() La fonction est utilisée pour effectuer une recherche insensible aux cas. Ici, le premier mot de chaque ligne du texte d'entrée sera converti en minuscules en utilisant baisser() fonction et assortir avec le modèle d'expression régulière. toupper () La fonction peut également être utilisée à cet effet, dans ce cas, le modèle doit être défini par toutes les lettres majuscules. Le texte défini dans l'exemple suivant contient le mot de recherche, 'la toile'En deux lignes qui seront imprimées en sortie.

$ echo -e "Web Design \ nweb Development \ nframework" | awk 'tolower ($ 0) ~ / ^ web /;'

Sortir:

Aller au contenu

awk avec nf (nombre de champs) variable

NF est une variable intégrée de la commande awk qui est utilisée pour compter le nombre total de champs dans chaque ligne du texte d'entrée. Créez n'importe quel fichier texte avec plusieurs lignes et plusieurs mots. l'entrée.SMS Le fichier est utilisé ici qui est créé dans l'exemple précédent.

Utilisation de NF à partir de la ligne de commande

Ici, la première commande est utilisée pour afficher le contenu de saisir.SMS Le fichier et la deuxième commande sont utilisés pour afficher le nombre total de champs dans chaque ligne du fichier en utilisant NF variable.

$ Cat Entrée.SMS
$ awk 'imprimer nf' entrée.SMS

Sortir:

Utilisation de NF dans le fichier awk

Créer un fichier awk nommé compter.awk avec le script ci-dessous. Lorsque ce script s'exécutera avec toutes les données de texte, chaque contenu de ligne avec des champs totaux sera imprimé en sortie.

compter.awk

imprimer 0
print "[Total Fields:" nf "]"

Exécutez le script par la commande suivante.

$ awk -f count.entrée awk.SMS

Sortir:

Aller au contenu

fonction awk gensub ()

getSub () est une fonction de substitution qui est utilisée pour rechercher une chaîne basée sur un délimiteur ou un modèle d'expression régulière particulier. Cette fonction est définie dans 'rester bouche bée' package qui n'est pas installé par défaut. La syntaxe de cette fonction est donnée ci-dessous. Le premier paramètre contient le modèle d'expression régulière ou le délimiteur de recherche, le deuxième paramètre contient le texte de remplacement, le troisième paramètre indique comment la recherche sera effectuée et le dernier paramètre contient le texte dans lequel cette fonction sera appliquée.

Syntaxe:

gensub (regexp, remplacement, comment [, cible])

Exécutez la commande suivante pour installer rester bouche bée package pour l'utilisation getSub () fonction avec la commande awk.

$ sudo apt-get install gawk

Créer un fichier texte nommé 'SalesInfo.SMS'Avec le contenu suivant pour pratiquer cet exemple. Ici, les champs sont séparés par un onglet.

SalesInfo.SMS

Lun 700000
Mar 800000
Mer 750000
Jeu 200000
Ven 430000
SAT 820000

Exécutez la commande suivante pour lire les champs numériques du SalesInfo.SMS fichier et imprimer le total de tous les montants de vente. Ici, le troisième paramètre, «G» indique la recherche globale. Cela signifie que le modèle sera recherché dans le contenu complet du fichier.

$ awk 'x = gensub ("\ t", "", "g", $ 2); printf x "+" end print 0 'SalesInfo.txt | BC -L

Sortir:

Aller au contenu

Fonction awk avec rand ()

rand() La fonction est utilisée pour générer un nombre aléatoire supérieur à 0 et moins de 1. Ainsi, cela générera toujours un nombre fractionnaire inférieur à 1. La commande suivante générera un nombre aléatoire fractionnaire et multipliera la valeur avec 10 pour obtenir un nombre supérieur à 1. Un numéro fractionnaire avec deux chiffres après le point décimal sera imprimé pour l'application de la fonction printf (). Si vous exécutez la commande suivante plusieurs fois, vous obtiendrez une sortie différente à chaque fois.

$ awk 'begin printf "le nombre est =%.2f \ n ", rand () * 10 '

Sortir:

Aller au contenu

Fonction définie par l'utilisateur awk

Toutes les fonctions utilisées dans les exemples précédents sont des fonctions intégrées. Mais vous pouvez déclarer une fonction définie par l'utilisateur dans votre script awk pour faire une tâche particulière. Supposons que vous souhaitez créer une fonction personnalisée pour calculer la zone d'un rectangle. Pour faire cette tâche, créez un fichier nommé 'zone.awk'Avec le script suivant. Dans cet exemple, une fonction définie par l'utilisateur nommé zone() est déclaré dans le script qui calcule la zone en fonction des paramètres d'entrée et renvoie la valeur de la zone. ligne La commande est utilisée ici pour prendre les commentaires de l'utilisateur.

zone.awk

# Calculer la zone
zone de fonction (hauteur, largeur)
Hauteur de retour * Largeur

# Commence l'exécution
COMMENCER
Imprimez "Entrez la valeur de la hauteur:"
getline h < "-"
Imprimer "Entrez la valeur de la largeur:"
getline w < "-"
Imprimer "Area =" Area (H, W)

Exécutez le script.

Area $ awk -f.awk

Sortir:

Aller au contenu

Exemple awk

AWK prend en charge les instructions conditionnelles comme les autres langages de programmation standard. Trois types d'instructions IF sont présentées dans cette section en utilisant trois exemples. Créer un fichier texte nommé articles.SMS avec le contenu suivant.

articles.SMS

HDD Samsung 100 $
Mouse A4tech
Imprimante HP 200 $

Exemple simple si:

Le commandement suivant lira le contenu du articles.SMS fichier et vérifier le 3rd Valeur du champ dans chaque ligne. Si la valeur est vide, il imprimera un message d'erreur avec le numéro de ligne.

$ awk 'if ($ 3 == "") imprimer "le champ de prix est manquant en lignes" nr'.SMS

Sortir:

Exemple IF-Else:

La commande suivante imprimera le prix de l'article si le 3rd Le champ existe dans la ligne, sinon il imprimera un message d'erreur.

$ awk 'if ($ 3 == "") imprimer "le champ de prix est manquant"
Else Imprimer "Le prix de l'article est" 3 $ 'Articles.SMS

Sortir:

if-else-if Exemple:

Lorsque la commande suivante s'exécutera à partir du terminal, il prendra les entrées de l'utilisateur. La valeur d'entrée sera comparée à chaque condition si la condition est vraie. Si une condition devient vraie, il imprimera la note correspondante. Si la valeur d'entrée ne correspond à aucune condition, elle imprimera l'échec.

$ awk 'begin imprimer "Entrez la marque:"
Getline Mark < "-"
if (Mark> = 90) Imprimez "A +"
else if (Mark> = 80) Imprimez "A"
else if (mark> = 70) imprimer "b +"
else imprimer "échec" '

Sortir:

Aller au contenu

Variables awk

La déclaration de la variable awk est similaire à la déclaration de la variable shell. Il y a une différence dans la lecture de la valeur de la variable. Le symbole '$' est utilisé avec le nom de variable pour la variable shell pour lire la valeur. Mais il n'est pas nécessaire d'utiliser '$' avec une variable awk pour lire la valeur.

En utilisant une variable simple:

La commande suivante déclarera une variable nommée 'placer' et une valeur de chaîne est attribuée à cette variable. La valeur de la variable est imprimée dans l'instruction suivante.

$ awk 'begin site = "Linuxhint.com "; site d'impression '

Sortir:

Utilisation d'une variable pour récupérer les données d'un fichier

La commande suivante recherchera le mot 'Imprimante' dans le fichier articles.SMS. Si une ligne du fichier commence par 'Imprimante'Ensuite, il stockera la valeur de 1St, 2nd et 3rd champs en trois variables. nom et prix Les variables seront imprimées.

$ awk '/ imprimante / name = $ 1; Brand = $ 2; prix = $ 3; print "item name =" name;
Imprimer "Article Price =" Price 'Articles.SMS

Sortir:

Aller au contenu

tableaux awk

Les tableaux numériques et associés peuvent être utilisés dans awk. La déclaration variable du tableau dans AWK est la même pour d'autres langages de programmation. Certaines utilisations des tableaux sont indiquées dans cette section.

Tableau associatif:

L'indice du tableau sera n'importe quelle chaîne pour le tableau associatif. Dans cet exemple, un tableau associatif de trois éléments est déclaré et imprimé.

$ awk 'begin
livres ["Web Design"] = "Learning Html 5";
Livres ["Programmation Web"] = "PHP et MySQL"
Livres ["Framework PHP"] = "Apprentissage Laravel 5"
printf "% s \ n% s \ n% s \ n", books ["web design"], livres ["programmation Web"],
livres ["Framework PHP"] '

Sortir:

Tableau numérique:

Un tableau numérique de trois éléments est déclaré et imprimé en séparant l'onglet.

$ awk 'begin
nombre [0] = 80;
nombre [1] = 55;
nombre [2] = 76;

# Éléments de tableau d'impression
printf "Valeurs du tableau:% d \ t% d \ t% d \ n", nombre [0], nombre [1], nombre [2]; '

Sortir:

Aller au contenu

boucle awk

Trois types de boucles sont pris en charge par AWK. Les utilisations de ces boucles sont présentées ici en utilisant trois exemples.

Pendant que Loop:

tandis que la boucle utilisée dans la commande suivante itérera 5 fois et sortira de l'instruction Loop for Break.

$ awk 'begin n = 1; tandis que (n 5) se casse; Imprimer n; n ++ '

Sortir:

Pour Loop:

Pour la boucle utilisée dans la commande awk suivante calculer la somme de 1 à 10 et imprimera la valeur.

$ awk 'begin sum = 0; pour (n = 1; n <= 10; n++) sum=sum+n; print sum '

Sortir:

Boucle à faire:

Une boucle à faire de la commande suivante imprimera tous les nombres même de 10 à 5.

$ awk 'begin compter = 10; do if (compteur% 2 == 0) compteur d'impression; comptoir--
tandis que (compteur> 5) '

Sortir:

Aller au contenu

awk pour imprimer la première colonne

La première colonne de n'importe quel fichier peut être imprimée en utilisant la variable $ 1 dans awk. Mais si la valeur de la première colonne contient plusieurs mots, alors seul le premier mot de la première colonne imprime. En utilisant un délimiteur spécifique, la première colonne peut être imprimée correctement. Créer un fichier texte nommé étudiants.SMS avec le contenu suivant. Ici, la première colonne contient le texte de deux mots.

Étudiants.SMS

Kaniz Fatema 30e grouper
Abir Hossain 35e grouper
John Abraham 40e grouper

Exécuter la commande awk sans aucun délimiteur. La première partie de la première colonne sera imprimée.

$ awk 'print $ 1' étudiants.SMS

Exécuter la commande awk avec le délimiteur suivant. La partie complète de la première colonne sera imprimée.

$ awk -f '\\ s \\ s' 'print $ 1' étudiants.SMS

Sortir:

Aller au contenu

awk pour imprimer la dernière colonne

$ (Nf) la variable peut être utilisée pour imprimer la dernière colonne de n'importe quel fichier. Les commandes awk suivantes impriment la dernière partie et la partie pleine de la dernière colonne de les étudiants.SMS déposer.

$ awk 'print $ (nf)' étudiants.SMS
$ awk -f '\\ s \\ s' 'print $ (nf)' étudiants.SMS

Sortir:

Aller au contenu

awk avec grep

Grep est une autre commande utile de Linux pour rechercher du contenu dans un fichier basé sur une expression régulière. Comment les commandes awk et grep peuvent être utilisées ensemble est indiquée dans l'exemple suivant. grep La commande est utilisée pour rechercher des informations sur l'ID de l'employé, '1002' depuis l'employé.SMS déposer. La sortie de la commande grep sera envoyée à AWK en tant que données d'entrée. Le bonus de 5% sera compté et imprimé en fonction du salaire de l'ID de l'employé, '1002 ' par commande awk.

Employé de $ CAT.SMS
$ grep '1002' employé.txt | awk -f '\ t' 'print $ 2 "obtiendra $" ($ 3 * 5) / 100 "bonus"'

Sortir:

Aller au contenu

awk avec un fichier bash

Comme d'autres commandes Linux, la commande awk peut également être utilisée dans un script bash. Créer un fichier texte nommé clients.SMS avec le contenu suivant. Chaque ligne de ce fichier contient des informations sur quatre champs. Ce sont l'identification, le nom, l'adresse et le numéro de mobile du client '/'.

clients.SMS

AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942
CA5455 / Virginia S Mota / 930 Bassel Street, Vallecito, Californie / 415-679-5908
IL4855 / Ann A Neale / 1932 Patterson Fork Road, Chicago, Illinois / 773-550-5107

Créer un fichier bash nommé item_search.frapper avec le script suivant. Selon ce script, la valeur de l'état sera tirée de l'utilisateur et recherchée dans les clients.SMS déposer grep commande et transmise à la commande awk comme entrée. La commande awk se lira 2nd et 4e champs de chaque ligne. Si la valeur d'entrée correspond à une valeur d'état de clients.SMS fichier puis il imprimera le client nom et numéro de portable, Sinon, il imprimera le message "Aucun client trouvé".

item_search.frapper

#!/ bac / bash
Echo "Entrez le nom de l'état:"
Lire l'état
Clients = 'grep "$ State" Clients.txt | awk -f "/" 'print "nom du client:" $ 2 "",
N ° de mobile: "$ $ ''
Si ["$ clients" != ""]; alors
Echo $ les clients
autre
écho "aucun client trouvé"
Fi

Exécutez les commandes suivantes pour afficher les sorties.

$ CLIENTS CAT.SMS
$ bash item_search.frapper

Sortir:

Aller au contenu

awk avec sed

Un autre outil de recherche utile de Linux est sed. Cette commande peut être utilisée pour la recherche et le remplacement du texte de n'importe quel fichier. L'exemple suivant montre l'utilisation de la commande awk avec sed commande. Ici, la commande SED recherchera tous les noms d'employés par 'J'Et passe à la commande awk comme entrée. awk imprimera un employé nom et IDENTIFIANT Après la mise en forme.

Employé de $ CAT.SMS
$ sed -n '/ j / p' employé.txt | awk -f '\ t' 'printf "% s (% s) \ n", $ 2, $ 1'

Sortir:

Aller au contenu

Conclusion:

Vous pouvez utiliser la commande awk pour créer différents types de rapports en fonction des données tabulaires ou délimitées après le filtrage des données correctement. J'espère que vous pourrez savoir comment fonctionne la commande awk après la pratique des exemples affichés dans ce tutoriel.