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:
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 40000La 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é.SMSSortir:
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: 778Exécutez la commande awk suivante pour changer le délimiteur, ':' par '-' au contenu du fichier, téléphone.SMS.
$ Cat Téléphone.SMSSortir:
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é clientLa 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:
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éphoneLecture 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:
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:
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.awkCourir 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:
'^' 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:
'$' 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:
'^' 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.SMSSortir:
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 0Exé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 gawkCré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 700000Exé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 zoneExé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 $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:
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"Sortir:
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.
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:
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;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.
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:
Un tableau numérique de trois éléments est déclaré et imprimé en séparant l'onglet.
$ awk 'beginSortir:
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.
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 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:
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 grouperExé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-7942Cré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é".
#!/ 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
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.