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 d’un fichier. L’utilisateur peut facilement effectuer de nombreux types de recherche, de remplacement et de génération de rapports en utilisant les commandes awk, grep et sed. awk n’est pas seulement une commande. C’est un langage de script qui peut être utilisé à la fois à partir du terminal et du fichier awk. Il prend en charge la variable, l’instruction conditionnelle, tableau, boucles etc. comme d’autres langages 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 ou le fichier texte et prend des mesures si une correspondance se trouve. Comment vous pouvez utiliser la commande et le script awk est montré dans ce tutoriel en utilisant 20 exemples utiles.,un

  • awk avec des données au format csv
  • awk regex
  • awk casse regex
  • awk nf (nombre de champs) de la variable
  • awk gensub fonction ()
  • awk avec rand() la fonction
  • awk fonction définie par l’utilisateur
  • awk si
  • awk variables
  • tableaux awk
  • awk boucle
  • awk pour imprimer la première colonne
  • awk pour imprimer la dernière colonne
  • awk avec grep
  • awk avec le script bash fichier
  • awk, sed
  • Utilisation de awk avec printf

    fonction printf() est utilisé pour le format de sortie dans la plupart des langages de programmation., Cette fonction peut être utilisée avec la commande awk pour générer différents types de sorties formatées. commande awk principalement utilisé pour tout fichier texte. Créez un fichier texte nommé employé.txt avec le contenu donné ci-dessous où les champs sont séparés par tabulation (‘\t’).

    un employé.txt

    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 l’employé.txt fichier ligne par ligne et imprimer le premier déposé après le formatage. 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.

    AW awk ‘{ printf » %10s\n »,$ 1 }’ employé.txt

    Sortie:

    aller au contenu

    awk pour diviser les espaces blancs

    Le séparateur de mots ou de champs par défaut pour diviser tout texte est un espace blanc. la commande awk peut prendre la valeur du texte en entrée de différentes manières. Le texte d’entrée est transmis à partir de la commande echo dans l’exemple suivant., Le texte, « j’aime la programmation » sera divisé par séparateur par défaut, espace, et le troisième mot sera imprimé en sortie.

    $ echo ‘j’aime la programmation’ | awk ‘{ print $3 }’

    la Sortie:

    Aller au Contenu

    awk pour changer le délimiteur

    awk commande peut être utilisée pour changer le séparateur de n’importe quel fichier de contenu. Imaginons que vous ayez un fichier texte nommé téléphone.txt avec le contenu suivant où ‘:’ est utilisé comme séparateur de champ du fichier de contenu.

    téléphone.,txt

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

    Exécuter la suite de awk commande pour changer le séparateur, ‘:’ par ‘-’ pour le contenu du fichier, téléphone.txt.

    phone Téléphone chat.txt
    AW awk ‘1 1=1 1’ FS= »: » OFS= »- » téléphone.txt

    Résultat:

    Aller au Contenu

    awk avec tabulation de données

    awk commande a de nombreuses variables qui sont utilisés pour lire le texte de différentes manières. Deux d’entre eux sont FS et OFS., FS est un séparateur de champ d’entrée et OFS est une variable de séparateur de champ de sortie. Les utilisations de ces variables sont présentées dans cette section. Créez un fichier séparé par onglets nommé input.txt avec le contenu suivant pour tester les utilisations des variables FS et OFS.

    Entrée.txt

    langage de script côté Client
    côté Serveur langage de script
    Serveur de Base de données
    Serveur Web

    Utilisation de la variable FS avec onglet

    La commande suivante va diviser chaque ligne d’entrée.fichier txt basé sur l’onglet (‘\t’) et imprimer le premier champ de chaque ligne.,

    input awk ‘{ print 1 1 }’ FS=’\t’ entrée.txt

    Sortie:

    Utilisation de la variable OFS avec tab

    la commande awk suivante imprimera les 9ème et 5ème champs de la sortie de commande ‘ls-l’ avec séparateur d’onglets après avoir imprimé le titre de la colonne « Nom” et « taille”. Ici, la variable OFS 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 9 9, 5 5}’

    Sortie:

    aller au contenu

    awk avec des données csv

    le contenu de n’importe quel fichier CSV peut être analysé de plusieurs manières en utilisant la commande awk. Créez un fichier CSV nommé ‘ client.csv  » avec le contenu suivant pour appliquer la commande awk.

    client.txt

    lecture d’un seul champ du fichier CSV

    l’option‘-F’ 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 champ Nom du client.fichier csv.

    $ cat client.csv
    AW awk-F », « ‘{print 2 2} ‘ Client.csv

    Sortie:

    lecture de plusieurs champs en combinant avec d’autres textes

    la commande suivante imprimera trois champs du client.csv en combinant le texte du titre, le nom, L’e-mail et le téléphone. La première ligne du client.fichier csv contient le titre de chaque champ. La variable NR contient le numéro de ligne du fichier lorsque la commande awk analyse le fichier., Dans cet exemple, la variable NR est utilisée pour omettre la première ligne du fichier. La sortie affichera les 2ème, 3ème et 4ème champs de toutes les lignes sauf la première ligne.

    AW awk-F », »‘NR>1 {print » Nom: « 2 2 », Email: « 3 3 », Téléphone: « 4 4}’ client.csv

    Résultat:

    Lecture du fichier CSV à l’aide d’un script awk

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

    awkcsv.awk
    BEGIN {FS = », »} {printf « %5s (%s)\n », $2,$1}

    exécutez awkcsv.fichier awk avec le contenu du client.fichier csv par la commande suivante.

    AW awk-F awkcsv.client awk.,csv

    Résultat:

    Aller au Contenu

    awk regex

    L’expression régulière est un modèle qui est utilisé pour la recherche d’une quelconque chaîne de caractères dans un texte. Différents types de tâches de recherche et de remplacement compliquées peuvent être effectués très facilement en utilisant l’expression régulière. Quelques utilisations simples de l’expression régulière avec la commande awk sont présentées dans cette section.

    jeu de caractères correspondant

    la commande suivante fera correspondre le mot Fool ou bool ou Cool avec la chaîne d’entrée et imprimera si le mot se trouve., Ici, la poupée ne correspondra pas et n’imprimera pas.

    $ printf « Fool\nCool\nDoll\nbool » | awk ‘/ool/’

    la Sortie:

    la Recherche de chaîne de caractères au début de la ligne

    ‘^’ symbole est utilisé dans l’expression régulière pour rechercher aucun motif de départ de la ligne. ‘Linux’ mot sera recherché au début de chaque ligne de texte dans l’exemple suivant. Ici, deux lignes commencent par le texte, ‘Linux’ et ces deux lignes seront affichées dans la sortie.,

    echo echo-e « Linux est libre d’utiliser\n c’est un logiciel open-source\nLinuxHint est
    un site de blog populaire » | awk ‘/^Linux/’

    Sortie:

    recherche chaîne à la fin de la ligne

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

    Programming echo-e « Script PHP\nJavaScript\programmation nVisual » | awk ‘/Script $ /’

    Sortie:

    recherche en omettant un jeu de caractères particulier

    ‘^ le symbole’ indique le début du texte lorsqu’il est utilisé devant n’importe quel motif de chaîne (‘/^…/’) ou avant n’importe quel jeu de caractères déclaré par ^. Si le symbole  » ^  » est utilisé à l’intérieur du troisième crochet, le jeu de caractères défini à l’intérieur du crochet sera omis au moment de la recherche., La commande suivante recherchera tout mot qui ne commence pas par’ F ‘ mais se termine par ‘ool’. Cool et bool seront imprimés en fonction des données de motif et de texte.

    Print printf « Fool\nCool\nDoll\nbool » | awk ‘/ool/’

    Sortie:

    aller au contenu

    awk regex insensible à la casse

    par défaut, l’expression régulière effectue une recherche sensible à la casse lors de la recherche d’un motif dans la chaîne. La recherche insensible à la casse peut être effectuée par la commande awk avec l’expression régulière., Dans l’exemple suivant, la fonction tolower() est utilisée pour effectuer une recherche insensible à la casse. Ici, le premier mot de chaque ligne du texte d’entrée sera converti en minuscules à l’aide de la fonction tolower() et correspondra au modèle d’expression régulière. la fonction toupper () peut également être utilisée à cette fin, dans ce cas, le motif doit être défini par toutes les majuscules. Le texte défini dans l’exemple suivant contient le mot de recherche, ‘web’ en deux lignes qui seront imprimées en sortie.,

    $ echo-e « Web Design\nWeb development\nFramework » | awk ‘tolower (^0) ~ / ^ web/;’

    Sortie:

    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éer un fichier texte avec plusieurs lignes et plusieurs mots. entrée.txt fichier est utilisé ici, qui est créé dans l’exemple précédent.,

    Utilisation de la norme NF en ligne de commande

    Ici, la première commande est utilisée pour afficher le contenu de l’entrée.le fichier txt et la deuxième commande sont utilisés pour afficher le nombre total de champs dans chaque ligne du fichier à l’aide de la variable NF.

    $ cat entrée.txt
    AW awk ‘{print NF}’ entrée.txt

    Résultat:

    Utilisation de la norme NF en awk fichier

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

    le comte.,awk

    {print $0}
    {print «  »}

    Exécuter le script par la commande suivante.

    count awk-F count.entrée awk.txt

    Résultat:

    Aller au Contenu

    awk gensub fonction ()

    getsub() est une fonction de substitution qui est utilisé pour la chaîne de recherche basé sur délimiteur particulier ou un modèle d’expression régulière. Cette fonction est définie dans ‘gawk’ paquet n’est pas installé par défaut. La syntaxe de cette fonction est donnée ci-dessous., Le premier paramètre contient le motif 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 )

    Exécutez la commande suivante pour installer gawk package pour l’utilisation de getsub() fonction avec la commande awk.

    su sudo apt-get install gawk

    créez un fichier texte nommé ‘salesinfo.,txt ‘ avec le contenu suivant pour pratiquer cet exemple. Ici, les champs sont séparés par un onglet.

    salesinfo.txt

    Lun 700000
    Mar 800000
    mer 750000
    jeu 200000
    VEN 430000
    Sam 820000

    exécutez la commande suivante pour lire les champs numériques du salesinfo.fichier txt et imprimer le total de tous les montants des ventes. Ici, le troisième paramètre,’ G ‘ indique la recherche globale. Cela signifie que le modèle sera recherché dans tout le contenu du fichier.,

    AW awk ‘{ x=gensub (« \t », » », »G », $ 2); printf x »+ »} END{ print 0 }’ salesinfo.txt | bc -l

    Résultat:

    Aller au Contenu

    awk avec la fonction rand ()

    la fonction rand() est utilisée pour générer un nombre aléatoire supérieur à 0 et inférieur à 1. Ainsi, il 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 par 10 pour obtenir un nombre supérieur à 1., Un nombre fractionnaire avec deux chiffres après la virgule décimale sera imprimé pour appliquer la fonction printf (). Si vous exécutez la commande suivante plusieurs fois, vous obtiendrez une sortie différente à chaque fois.

    AW awk ‘BEGIN {printf « le nombre est =%.2f\n » , rand()*10}’

    Résultat:

    Aller au Contenu

    awk fonction définie par l’utilisateur

    Toutes les fonctions qui sont 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 spécifique., Supposons que vous voulez créer une fonction personnalisée pour calculer l’aire d’un rectangle. Pour faire cette tâche, créez un fichier nommé ‘area.awk’ avec le script suivant. Dans cet exemple, une fonction définie par l’utilisateur nommée area () est déclarée dans le script qui calcule la zone en fonction des paramètres d’entrée et renvoie la valeur de la zone. la commande getline est utilisée ici pour prendre l’entrée de l’utilisateur.

    la zone.awk

    exécutez le script.

    $ awk -f de la zone.,awk

    Résultat:

    Aller au Contenu

    awk si exemple

    awk prend en charge les instructions conditionnelles comme d’autres langages de programmation standard. Trois types d’instructions if sont présentés dans cette section à l’aide de trois exemples. Créez un fichier texte nommé éléments.txt avec le contenu suivant.

    les éléments.txt

    HDD Samsung Samsung 100
    Souris A4Tech
    imprimante HP HP 200

    simple si exemple:

    la commande suivante Lira le contenu des éléments.fichier txt et vérifiez la 3ème valeur de champ dans chaque ligne., Si la valeur est vide, il affichera un message d’erreur avec le numéro de ligne.

    AW awk ‘{ if ($3== » ») print « le champ Prix est manquant dans la ligne » NR }’ articles.txt

    Résultat:

    if-else exemple:

    La commande suivante va imprimer le prix de l’article, si le 3ème champ existe dans la ligne, sinon, il affichera un message d’erreur.

    AW awk ‘{ if ($3== » ») imprimer »le champ de prix est manquant « 
    sinon imprimer « le prix de l’article est » 3 3 }’ articles.,txt

    Résultat:

    si-sinon-si exemple:

    Lorsque la commande suivante va s’exécuter à partir du terminal ensuite, il faudra l’entrée de l’utilisateur. La valeur d’entrée sera comparée à chaque condition if jusqu’à ce que la condition soit vraie. Si une condition devient vraie, elle imprimera la note correspondante. Si la valeur d’entrée ne correspond à aucune condition, l’impression échouera.,

    $ awk ‘BEGIN { print « Entrez la marque: »
    getline marque < « -« 
    if (marque >= 90) print « A+ »
    else if( marque >= 80) print « A »
    else if( marque >= 70) print « B+ »
    else print « Fail » }’

    la Sortie:

    Aller au Contenu

    awk variables

    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 la variable shell pour lire la valeur. Mais il n’est pas nécessaire d’utiliser ‘$’ avec la variable awk pour lire la valeur.

    en utilisant une variable simple:

    la commande suivante déclarera une variable nommée ‘site’ et une valeur de chaîne sera affectée à cette variable. La valeur de la variable est imprimée dans l’instruction suivante.

    BEGIN awk ‘BEGIN{ site= » LinuxHint.,com »; print site}’

    Résultat:

    l’Aide d’une variable pour récupérer des données à partir d’un fichier

    La commande suivante va rechercher le mot « Imprimante » dans le fichier articles.txt. Si une ligne du fichier commence par ‘Printer’, elle stockera la valeur des 1er, 2e et 3e champs en trois variables. les variables de nom et de prix seront imprimées.

    $ awk ‘/Imprimante/ { nom=$1;marque=$2;prix=$3;print « item name= » nom;
    print « prix= » price }’ éléments.,txt

    Résultat:

    Aller au Contenu

    tableaux awk

    à la Fois numérique et associé les tableaux peuvent être utilisés dans awk. La déclaration de variable de tableau dans awk est identique à d’autres langages de programmation. Certaines utilisations des tableaux sont présentées dans cette section.

    Tableau Associatif:

    L’index de la matrice sera une chaîne pour le tableau associatif. Dans cet exemple, un tableau associatif de trois éléments est déclaré et imprimé.,

    Résultat:

    Tableau Numérique:

    Un tableau numérique de trois éléments sont déclarées et imprimé par la séparation de l’onglet.

    Résultat:

    Aller au Contenu

    awk boucle

    Trois types de boucles sont pris en charge par awk. Les utilisations de ces boucles sont présentées ici à l’aide de trois exemples.

    While loop:

    while loop qui est utilisé dans la commande suivante va itérer 5 fois et quitter l’instruction loop for break.,

    $ awk ‘BEGIN { n = 1; while (n <= 10) { if(n > 5) break; impression de n; n++ } }’

    la Sortie:

    Pour la boucle:

    Pour la boucle qui est utilisé dans la suite de awk commande calcule la somme de 1 à 10 et imprimer la valeur.,

    $ awk ‘BEGIN { somme=0; for (n = 1; n <= 10; n++) somme=somme+n; print sum }’

    la Sortie:

    -lors de la boucle:

    -lors de la boucle de la commande suivante permet d’imprimer tous le même nombre de 10 à 5.,

    $ awk ‘BEGIN {compteur = 10; do { if (compteur%2 ==0) print compteur; compteur– }
    while (compteur > 5) }’

    la Sortie:

    Aller au Contenu

    awk pour imprimer la première colonne

    La première colonne de n’importe quel fichier peut être imprimé à l’aide de $1 variable awk. Mais si la valeur de la première colonne contient plusieurs mots, alors que 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éez un fichier texte nommé étudiants.,txt avec le contenu suivant. Ici, la première colonne contient le texte de deux mots.

    étudiants.,txt

    Kaniz Fatema 30<sup>th</sup> batch
    Abir Hossain 35<sup>th</sup> batch
    John Abraham 40<sup>th</sup> batch

    Run awk command without any delimiter. The first part of the first column will be printed.,

    students awk ‘{print 1 1}’ étudiants.txt

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

    AW awk-F ‘\\s\\S’ ‘{print 1 1}’ étudiants.txt

    Résultat:

    Aller au Contenu

    awk pour imprimer la dernière colonne

    $(NF) de la variable peut être utilisée pour imprimer la dernière colonne de n’importe quel fichier. Les commandes awk suivantes imprimeront la dernière partie et la partie complète de la dernière colonne des étudiants.fichier txt.,

    students awk ‘{print ((NF)}’ étudiants.txt
    $ awk -F ‘\\s\\s’ ‘{print $(NF)}’ étudiants.txt

    Résultat:

    Aller au Contenu

    awk avec grep

    grep est une autre commande utile de Linux pour la recherche de contenu dans un fichier sur la base de toute expression régulière. L’exemple suivant montre comment les commandes awk et grep peuvent être utilisées ensemble. commande grep permet de rechercher des informations de l’id de l’employé, ‘1002  » de l’employé.fichier txt. 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.

    $ cat employé.txt
    employee grep ‘1002’ employé.txt / awk-F’ \ t  »{print 2 2  » obtiendra $ » ($3*5)/100 « bonus »} ‘

    Sortie:

    aller au contenu

    awk avec le fichier BASH

    comme les autres commandes Linux, la commande awk peut également être utilisée dans un script BASH. Créez un fichier texte nommé les clients.txt avec le contenu suivant. Chaque ligne de ce fichier contient des informations sur quatre champs., Il s’agit de l’identifiant, du nom, de l’adresse et du numéro de téléphone portable du client, séparés par »/ ».

    les clients.txt

    créez un fichier bash nommé item_search.bash avec le script suivant. Selon ce script, la valeur d’état sera extraite de l’utilisateur et recherchée dans les clients.fichier txt par la commande grep et transmis à la commande awk en entrée. La commande Awk Lira les 2ème et 4ème champs de chaque ligne. Si la valeur d’entrée correspond à n’importe quelle valeur d’état des clients.fichier txt ensuite, il imprimera le nom et le numéro de téléphone portable du client, sinon, il imprimera le message « Aucun client trouvé”.,

    item_search.bash

    Exécutez les commandes suivantes pour afficher les sorties.

    $ cat clients.txt
    bas bash item_search.bash

    Résultat:

    Aller au Contenu

    awk, sed

    voici un Autre outil de recherche de Linux est sed. Cette commande peut être utilisée à la fois pour rechercher et remplacer le texte de n’importe quel fichier. L’exemple suivant montre l’utilisation de la commande awk avec la commande sed. Ici, la commande sed recherchera tous les noms d’employés commençant par ‘ J ‘ et passant à la commande awk en entrée., awk imprimera le nom et L’ID de l’employé après le formatage.

    $ cat employé.txt
    employee sed-N ‘/J/P’ employé.si vous avez un problème, vous pouvez le faire. », $2, $1 }’

    Sortie:

    aller au contenu

    Conclusion:

    Vous pouvez utiliser la commande awk pour créer différents types de rapports basés sur des données tabulaires ou délimitées après avoir filtré les données correctement. J’espère que vous pourrez apprendre comment fonctionne la commande awk après avoir pratiqué les exemples présentés dans ce tutoriel.

    Articles

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *