2 votes

Comment imprimer un champ spécifique dans AWK ?

Une question très simple, à laquelle je n'ai pas trouvé de réponse. Comment imprimer un champ spécifique en awk ?

awk '/word1/' imprimera toute la phrase, alors que je n'ai besoin que d'une seule phrase. word1 . Ou bien j'ai besoin d'une chaîne de motifs ( word1 + word2 ) à imprimer uniquement à partir d'un texte.

3voto

Zsolt Botykai Points 20615

Si le modèle est un mot unique (que vous voulez imprimer et que vous ne pouvez pas contaionner) FS (séparateur de champ de saisie)) pourquoi pas :

awk -v MYPATTERN="INSERT_YOUR_PATTERN" '$0 ~ MYPATTERN { print MYPATTERN }' INPUTFILE

Si votre modèle est une regex :

awk -v MYPATTERN="INSERT_YOUR_PATTERN" '$0 ~ MYPATTERN { print gensub(".*(" MYPATTERN ").*","\\1","1",$0) }' INPUTFILE

Si votre modèle doit être vérifié dans chaque champ :

awk -v MYPATTERN="INSERT_YOUR_PATTERN" '$0 ~ MYPATTERN { 
    for (i=1;i<=NF;i++) {
        if ($i ~ MYPATTERN) { print "Field " i " in " NR " row matches: " MYPATTERN }
    }
}' INPUTFILE

Modifiez les éléments ci-dessus selon vos goûts.

1voto

William Pursell Points 56211

Les champs en awk sont représentés par $1, $2, etc :

$ echo this is a string | awk '{ print $2 }'
is

$0 est la ligne entière, $1 est le premier champ, $2 est le champ suivant (ou blanc), $NF est le dernier champ, $( NF - 1 ) est l'avant-dernier champ, etc.

EDIT (en réponse à un commentaire).

Vous pouvez essayer :

awk '/crazy/{ print substr( $0, match( $0, "crazy" ), RLENGTH )}'

1voto

Vijay Points 17992

Je sais que vous pouvez le faire avec awk : une alternative serait :

sed -nr "s/.*(PATTERN_TO_MATCH).*/\1/p" file

ou vous pouvez utiliser grep -o

0voto

Dr G Points 2103

Quelque chose comme ça peut-être :

awk '{split("bla1 bla2 bla3",a," "); print a[1], a[2], a[3]}'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X