Présentation
Le gawk
La commande est la version GNU de awk. Gawk est un puissant outil de traitement de texte et de manipulation de données doté de nombreuses fonctionnalités et d'utilisations pratiques.
Ce guide vous apprendra à utiliser Linux gawk
commande avec des exemples.
Prérequis
- Un système exécutant Linux.
- Accès au terminal.
- Un fichier texte. Ce tutoriel utilise le fichier people à titre d'exemple.
Gawk Linux Command Syntaxe
Le gawk
de base la syntaxe ressemble à ceci :
gawk [options] [actions/filters] input_file
La commande ne peut pas être exécutée sans aucun argument. Les options ne sont pas obligatoires, mais pour gawk
pour produire une sortie, au moins une action doit être affectée. Les actions et les filtres sont différentes sous-commandes et critères de sélection qui activent gawk
pour manipuler les données du fichier d'entrée.
Remarque :Encadrez les options et les actions entre guillemets simples.
Options d'émerveillement
Le gawk
command est un outil polyvalent grâce à ses nombreux arguments. Avec gawk
étant l'implémentation GNU de awk
, longues, des options de style GNU sont disponibles. Chaque option longue a une option courte correspondante.
Les options courantes sont présentées ci-dessous :
Option | Description |
---|---|
-f program-file , --file program-file | Lit les commandes d'un fichier, qui sert de script, au lieu du premier argument dans le terminal. |
-F fs , --field-separator fs | Utilise la variable prédéfinie fs comme séparateur de champ de saisie. |
-v var=val , --assign var=val | Assigne une valeur à la variable avant d'exécuter un script. |
-b , --characters-as-bytes | Traite toutes les données comme des caractères à un octet. |
-c , --traditional | Exécute gawk en mode compatibilité. |
-C , --copyright | Affiche le message du droit d'auteur GNU. |
-d[file] , --dump-variables[=file] | Affiche une liste de variables, leurs types et leurs valeurs. |
-e program-text , --source program-text | Permet de mélanger les fonctions de la bibliothèque et le code source. |
-E file , --exec file | Désactive les affectations de variables de terminal. |
-L [value] , --lint[=value] | Imprime des messages d'avertissement concernant le code non portable vers d'autres implémentations AWK. |
-S , --sandbox | Exécute gawk en mode bac à sable. |
Variables intégrées gawk
Le gawk
La commande offre plusieurs variables intégrées utilisées pour stocker et ajouter de la valeur à la commande. Les variables sont manipulées depuis le terminal et n'affectent le programme que lorsqu'un utilisateur leur attribue une valeur. Quelques éléments gawk
importants les variables intégrées sont :
Variable | Description |
---|---|
ARGC | Affiche le nombre d'arguments terminaux. |
ARGIND | Affiche l'index du fichier ARGV. |
ARGV | Présente un tableau d'arguments terminaux. |
ERRNO | Contient des chaînes décrivant une erreur système. |
FIELDWIDTHS | Affiche la liste des largeurs de champ séparées par des espaces. |
FILENAME | Imprime le nom du fichier d'entrée. |
FNR | Affiche le numéro d'enregistrement d'entrée. |
FS | Représente le séparateur de champ de saisie. |
IGNORECASE | Active ou désactive la recherche sensible à la casse. |
NF | Imprime le nombre de champs du fichier d'entrée. |
NR | Imprime le nombre de lignes du fichier actuel. |
OFS | Affiche le séparateur de champ de sortie. |
ORS | Affiche le séparateur d'enregistrement de sortie. |
RS | Imprime le séparateur d'enregistrement d'entrée. |
RSTART | Représente l'index du premier caractère correspondant. |
RLENGTH | Représente la longueur de chaîne correspondante. |
Exemples de gawk
L'utilisation de gawk
les fonctions de correspondance de modèles et de traitement du langage sont étendues. Cet article vise à fournir des exemples pratiques à travers lesquels les utilisateurs apprennent à utiliser l'utilitaire gawk.
Important : Le gawk
La commande est sensible à la casse. Utilisez le IGNORECASE
variable pour ignorer la casse.
Imprimer les fichiers
Par défaut, gawk
avec un print
L'argument affiche chaque ligne du fichier spécifié. Par exemple, exécuter la commande cat sur les personnes fichier texte imprime ce qui suit :
Le gawk
commande affiche le même résultat :
gawk '{print}' people
Imprimer une colonne
Dans les fichiers texte, les espaces sont généralement utilisés comme délimiteurs pour les colonnes. Les gens le fichier se compose de quatre colonnes :
- Nombres ordinaux.
- Prénoms.
- Noms de famille.
- Année de naissance.
Utilisez gawk
pour afficher uniquement une colonne spécifique dans le terminal. Par exemple :
gawk '{print $2}' people
La commande imprime uniquement la deuxième colonne. Pour imprimer plusieurs colonnes, comme la colonne 1 (nombres ordinaux) et la colonne 2 (prénoms), exécutez :
gawk '{print $1, $2}' people
Le gawk
la commande fonctionne également sans la virgule entre $1
et $2
. Cependant, il n'y a pas d'espaces entre les colonnes dans la sortie :
gawk '{print $1 $2}' people
Filtrer les colonnes
Le gawk
La commande offre des options de filtrage supplémentaires. Par exemple, imprimez les lignes contenant la lettre majuscule O avec :
gawk '/O/ {print}' people
Pour afficher uniquement les lignes contenant des lettres O ou A , utilisez la tuyauterie :
gawk '/O|A/ {print}' people
La commande imprime toute ligne contenant un mot avec un O majuscule ouA . D'autre part, utilisez un ET logique (&&
) pour afficher les lignes comprenant à la fois O et l'année 1995 :
gawk '/O/ && /1995/' people
Les filtres fonctionnent également avec des nombres. Par exemple, n'afficher que les personnes nées dans les années 1990 avec :
gawk '/199*/ {print}' people
La sortie affiche uniquement les lignes dans lesquelles la quatrième colonne inclut la valeur 199 .
Personnalisez encore plus la sortie en combinant les options mentionnées précédemment. Par exemple, n'imprimez que les noms et prénoms des personnes nées en 1995 ou 2003 avec :
gawk '/1995|2003/ {print $2, $3}' people
La commande imprime les colonnes deux et trois comme indiqué dans le {print $2, $3}
partie. La sortie affiche uniquement les lignes contenant les nombres 1995 et 2003 , même si les colonnes contenant ces nombres sont masquées.
Le gawk
La commande permet également aux utilisateurs d'imprimer tout sauf les lignes contenant la chaîne spécifiée avec la logique NOT (!
). Par exemple, omettez les lignes contenant la chaîne 19 dans la sortie :
gawk '!/19/' people
Ajouter des numéros de ligne
Les gens le fichier inclut les numéros de ligne dans la première colonne. Si les utilisateurs travaillent sur un fichier sans numéro de ligne, gawk
présente des options pour les ajouter.
Par exemple, les humains le fichier ne contient aucun nombre ordinal :
Pour ajouter des numéros de ligne, exécutez gawk
avec FNR
et next
:
gawk '{ print FNR, $0; next}' humans
La commande ajoute un numéro de ligne avant chaque ligne. Le même résultat est obtenu avec le NR
variables :
gawk '{print NR, $0}' mobile.txt
Rechercher le nombre de lignes
Pour compter le nombre total de lignes dans le fichier, utilisez le END
déclaration et le NR
variable avec gawk
:
gawk 'END { print NR }' people
La commande lit chaque ligne. Une fois gawk
atteint END
, il imprime la valeur de NR
- qui contient le nombre total de lignes. Exécuter la même commande sans le END
instruction imprime uniquement la valeur de NR
- le nombre de lignes :
Filtrer les lignes en fonction de la longueur
Utilisez l'option de commande suivante pour n'imprimer que les lignes de plus de 20 caractères :
gawk 'length>20' people
Cela fonctionne également avec plusieurs arguments. Par exemple, affichez des lignes plus longues que 17 mais plus court que 20 caractères :
gawk 'length<20 && length>17' people
Pour afficher des lignes d'exactement 20 caractères, exécutez :
gawk 'length==20' people
Imprimer les informations en fonction des conditions
Le gawk
La commande permet l'utilisation des instructions if-else. Par exemple, une autre façon de filtrer uniquement les personnes nées après 1999 est avec une simple instruction if :
gawk '{ if ($4>1999) print }' people
L'instruction if définit la condition selon laquelle les entrées de la colonne quatre doivent être supérieures à 1999 . La sortie affiche uniquement les entrées qui satisfont à la condition. Développez la commande dans une instruction if-else pour imprimer les lignes ne satisfaisant pas la condition d'origine.
gawk '{if ($4>1999) print $0," ==>00s"; else print $0, "==>90s"}' people
La commande comprend :
- Instruction Si. Si la condition est satisfaite,
gawk
ajoute une chaîne "==>90s " à la ligne de sortie. - Instruction Else. Si la ligne ne satisfait pas la condition,
gawk
imprime toujours cette ligne dans la sortie, en ajoutant les "==>00s " chaîne à la sortie.
Ajouter un en-tête
De la même manière que le END
permet aux utilisateurs de modifier la sortie à la fin du fichier, le BEGIN
formate les données au début.
Lorsqu'il est utilisé avec awk
, le BEGIN
les sections sont toujours exécutées en premier. Après cela, awk
exécute les lignes restantes. Une façon d'utiliser le BEGIN
L'instruction consiste à ajouter un en-tête à la sortie.
Exécutez la commande suivante pour ajouter une section au-dessus du awk
sortie :
gawk 'BEGIN {print "No/First&Last Name/Year of Birth"} {print $0}' people
Trouvez la longueur de ligne la plus longue
Combinez les arguments précédents avec le si et END
déclarations pour trouver la ligne la plus longue dans les personnes fichier :
gawk '{ if (length($0) > max) max = length($0) } END { print max }' people
Trouvez le nombre de champs
Le gawk
La commande permet également aux utilisateurs d'afficher le nombre de champs avec le NF
variable. La manière la plus simple d'afficher le nombre de champs imprime une sortie difficile à lire :
gawk '{print NF}' people
La commande affiche le nombre de champs par ligne sans aucune information supplémentaire. Pour personnaliser la sortie et la rendre plus lisible par l'homme, ajustez la commande initiale :
gawk '{print NR, "-->", NF}' people
La commande inclut désormais :
- Le
NR
variable qui ajoute des numéros de ligne à chaque ligne de sortie. - Le
-->
chaîne qui sépare les numéros de ligne des numéros de champ.
Une autre façon d'afficher les numéros de ligne et de champ dans les personnes fichier est d'imprimer des colonnes avec NF
. Notez que les personnes le fichier comprend des nombres ordinaux dans la première colonne. Donc le NR
variable est omise :
gawk '{print $0, "-->", NF}' people
Enfin, pour imprimer le nombre total de champs, exécutez :
gawk '{num_fields = num_fields + NF} END {print num_fields}' people
Le fichier comporte dix lignes et quatre colonnes. Par conséquent, la sortie est correcte.
Conclusion
Après avoir suivi ce tutoriel, vous savez comment utiliser le gawk
pour le traitement de texte avancé et la manipulation de données.
Pensez également à utiliser grep, un puissant outil Linux pour rechercher des chaînes, des mots et des modèles.