Linux (éditeur de texte awk)

embarrassant

concept bizarre :

        Awk est l'outil de texte le plus puissant, et il fonctionne également par ligne. Une fois que vous avez fini d'opérer sur la ligne, vous pouvez sélectionner la colonne de la ligne en fonction de la commande spécifiée.

        Délimiteur d'Awk : le délimiteur par défaut d'awk est un espace ou une touche de tabulation (plusieurs espaces seront automatiquement compressés en un seul)

        Format d'utilisation : fichier d'option awk 'modèle/condition{action}'

        Opération : la valeur par défaut est d'imprimer (imprimer plusieurs colonnes plus ; 0 $ imprimer tout)

options courantes


-F : Spécifiez le délimiteur, si c'est un espace, vous n'avez pas besoin d'ajouter F

-v : affectation de variables

Awk variable intégrée
$0 couramment utilisée : imprimer tout le contenu

$n : la première colonne de la ligne à traiter

NR : le numéro de ligne de la ligne traitée

NF : le nombre de champs à traiter la ligne en cours, $NF signifie le dernier champ

FS : délimiteur de colonne, délimiteur du texte spécifié et le même effet que F. FS ​​doit utiliser "" (guillemets doubles)

OFS : délimiteur pour le texte de sortie

RS : spécifiez le délimiteur sous forme de retour chariot

Remarque : ajoutez $ à la variable intégrée $n et n'avez pas besoin d'ajouter $ aux autres variables intégrées, encore moins aux guillemets et aux crochets, sinon elles seront traitées comme des chaînes.


Imprimer :
                awk '{ $1}' test.txt #imprimer la première colonne

                awk '{print $1,$2,$3}' test.txt #imprimer la première, la deuxième et la troisième colonne

                awk '{ print $0}' test.txt # $0 consiste à imprimer tout le contenu

                awk '{print NR}' test.txt #Imprime uniquement le numéro de ligne

                awk '{print NR,$0}' test.txt #Imprime le numéro de ligne et affiche tout le contenu

Rechercher et imprimer :
                awk 'NR==3{print}' test.txt #Spécifiez la troisième ligne à imprimer

                awk 'NR==1,NR==3{print}' test.txt #imprimer la première ligne sur la troisième ligne

                awk 'NR==1;NR==3{print}' test.txt #Imprimer les première et troisième lignes


Impression de parité :


awk 'NR%2==0 {print}' test.txt #Imprimer les lignes paires

awk 'NR%2==1 {print}' test.txt #imprimer les lignes impaires


opération awk (format fixe) :

Les opérations décimales sont prises en charge par défaut (** et ^ représentent une exponentiation)


 

La fonction intégrée d'Awk : getline

1. S'il n'y a pas de symbole de redirection (<,>) ou (|) sur les côtés gauche et droit de getline, awk lira d'abord la première ligne, mais si getline est ajouté, il ignorera la première ligne et lira la seconde. doubler

awk '{getline;print}' test.txt #Équivalent à l'impression en ligne paire

awk '{print;getline}' test.txt #Équivalent à l'impression de lignes impaires


2. S'il y a des caractères de redirection ou de canal des deux côtés, getline agit sur le fichier d'entrée dirigé

awk '{getline < « test1.txt »;print>« test2.txt »}' test1.txt


awk filtrage de texte (similaire à grep) :

                awk '/^root/{print}' /etc/passwd #lignes commençant par root

                awk '/bash$/{print}' /etc/passwd #lignes se terminant par bash 

Comment obtenir le nombre de lignes dans le contenu du fichier via awk ?

Expressions ternaires : similaires à Java

Format de commande d'expression ternaire : awk '(expression conditionnelle) ? (Expression ou valeur A) : (expression ou valeur B)'

Imprimez les lignes 1 à 6, si la troisième colonne est supérieure à la quatrième colonne, affichez la troisième colonne, sinon affichez la quatrième colonne

Combiner la déduplication

awk '{a[$1]++};END{for (i in a){print i,a[i]}}'


Mode DÉBUT

awk 'BEGIN{..};{..};END{..}'file #Avant d'opérer sur le fichier, la condition du mode BEGIN{..} ou l'opération de commande sera exécutée en premier. Le {..} au milieu est la véritable commande de traitement des fichiers ;

Enfin, END{..} est une instruction de fin, qui imprime généralement le résultat de l'exécution.

Par exemple : awk 'BEGIN{i=0};{i++};END{print i}' /etc/passwd #imprimer le nombre total de lignes dans /etc/passwd

awk prend en charge l'impression de jugement conditionnel

Jugement conditionnel : $$(et) || (ou)

#Imprimer la sixième colonne est /home/test1 ou la septième colonne est /bin/bash

Le filtre précis d'Awk

>;<;= pour comparer les valeurs

$n~ "string" : indique que le nième champ contient un mot

$n ! ~ "string": indique que le nième champ ne contient pas un certain caractère

$n=="string" : Indique que le nième champ est un certain caractère

$n ! ="string": Indique que le nième champ n'est pas un certain caractère

$NF : dernier champ

awk combiné avec des tableaux à utiliser

Définir un tableau : awk 'BEGIN{a[0]=10;a[1]=20;a[2]=30; print a[1]}'

Exemple :
awk -F : '$7~"bash" {print $1,$NF}' /etc/passwd #La septième colonne contient bash, imprime le premier champ et le dernier champ

awk -F : '($6=="/home/my")&&($7=="/bin/bash"){print $1,$NFS}' /etc/passwd

awk -F : '($6=="/home/my")||($7=="/bin/bash"){print $1,$NFS}' /etc/passwd

awk -F : '($3!=0)||($4>10){print $1}' /etc/passwd

Je suppose que tu aimes

Origine blog.csdn.net/ZZZ_CCC01/article/details/131941690
conseillé
Classement