AWK
La différence entre AWK et sed
- AWK est utilisé pour un traitement de texte plus standardisé, utilisé pour compter le nombre et sortir le champ spécifié
- sed est utilisé pour transformer du texte non standard en texte plus standardisé
Référence et séparation des champs AWK
- AWK est également lu par ligne. Chaque ligne est appelée un enregistrement. Les mots séparés par des espaces et des tabulations sont appelés champs. Vous pouvez spécifier le séparateur pour séparer les champs.
- Utilisez $ 1 $ 2 ... $ n pour chaque champ et $ 0 pour une ligne entière
- awk '{print $ 1, $ 2, $ 3}' nom de fichier
- awk -F "'"' / ^ menu / {print $ 2} '/boot/grub2/grub.cfg pour diviser le champ avec un', supprimez les informations du noyau dans le fichier
- {print x ++, $ 2} x ++ peut afficher le nombre de lignes
- L'option -F est utilisée pour spécifier le séparateur
- awk -F ',' '{print $ 1, $ 2, $ 3}' nom de fichier
- Les délimiteurs peuvent être exprimés à l'aide d'expressions régulières
Expression AWK
- Variables système
-
Séparateurs de champs FS et OFS, OFS indique les séparateurs de champs de sortie
- head -5 / etc / passwd | awk 'BEGIN {FS = ":"} {print $ 1}'
BEGING, prétraitez avant de lire le fichier. Avant de lire le fichier passwd, spécifiez le ":" comme délimiteur via l'option FS. - head -5 / etc / passwd | awk 'BEGIN {FS = ":"; OFS = "-"} {print $ 1, $ 2}' OFS = "-", OFS est après avoir trouvé le champ, le système utilise les espaces par défaut Séparation et OFS ont changé le symbole de séparation par défaut.
- head -5 / etc / passwd | awk 'BEGIN {FS = ":"} {print $ 1}'
-
Séparateur d'enregistrement de ligne RS, ligne d'enregistrement, RS est une nouvelle ligne par défaut, lorsque plusieurs lignes sont combinées en une seule ligne, utilisez RS pour traiter
- head -5 / etc / passwd | awk 'BEGIN {RS = ":"} {print $ 1}' Le séparateur d'enregistrement de ligne par défaut du système est un saut de ligne, RS = ":", remplacez le séparateur d'enregistrement de ligne par:
-
Lignes NR et FNR
- head -5 / etc / passwd | awk '{print NR, $ 0}' NR affiche le numéro de ligne, $ 0 affiche le contenu de la ligne
- awk '{print NR, $ 0}' / etc / hosts / etc / hosts
- awk '{print FNR, $ 0}' / etc / hosts / etc / hosts
Pour les fichiers uniques, il n'y a pas de différence entre l'utilisation de NR et FNR. Si plusieurs fichiers sont connectés, NR triera toujours le contenu dans l'ordre, sans distinguer les fichiers; Triez d'abord les fichiers, puis triez-les individuellement.
-
Le nombre de champs NF, le contenu du dernier champ peut être retiré avec $ NF
- head -5 / etc / passwd | awk 'BEGIN {FS = ":"} {print NF}' affiche le nombre de champs dans chaque ligne
-