awk + imprimer les lignes de la première ligne jusqu'au mot de correspondance

8

Je veux imprimer toutes les lignes du fichier jusqu'au mot de correspondance, veuillez me conseiller sur la façon de le faire avec awk

par exemple

Je veux imprimer toutes les lignes jusqu'au mot PPP

remarquez que la première ligne doit être différente de AAA (n'importe quel mot)

cat file.txt

AAA   ( the first line/word chuld be any word !!!!! )
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
MMM
(((
&&&

donc j'ai besoin de ça

AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP

autre exemple (souhaitez imprimer jusqu'à KJGFGHJ)

 cat file.txt1

 HG
 KJGFGHJ
 KKKK

donc j'ai besoin de

 HG
 KJGFGHJ
maihabunash
la source

Réponses:

12

Essayer:

$ awk '1;/PPP/{exit}' file
AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
cuonglm
la source
5
Idem avec ci-dessus via sed:sed '/PPP/q' infile
Costas
@Costas: Oui, le PO veut awk, donc je ne donne pas d'autres outils.
cuonglm
Le 1 au début est comme une instruction complète "// {print $ 0}" qui est toujours mise en correspondance. awk n'imprime pas sans lui.
cidermole
@cidermole: Pas exactement. 1c'est comme {print $0}. Notez également qu'il //s'agit d'un modèle vide et que le résultat n'est pas spécifié. C'est du travail dans gawk, mawkBrian Kernighan propre version mais pas dans nawk, oawkdepuis le coffre à outils d'héritage.
cuonglm
Merci pour la solution sed! Je veux juste le faire et je me fiche de l'outil
Aaron McMillin
6

Vous pouvez également utiliser un modèle de plage correspondant à la première ligne (NR égal à 1) jusqu'à la première correspondance de «PPP» dans une ligne

awk 'NR==1,/PPP/' file

si la ligne doit correspondre exactement à «PPP», utilisez uniquement

awk 'NR==1,/^PPP$/' file

Si vous souhaitez faire de même pour chaque fichier de la liste d'arguments, utilisez la variable FNR qui se réinitialise à 1 pour la première ligne de chaque fichier traité

awk 'FNR==1,/PPP/' file1 file2 ...
user531214
la source
2

Comme OP l'a dit, sa première ligne ou mot de fichier peut contenir n'importe quel mot (comme PPPlui-même), vous devez donc vérifier cela et empêcher la première ligne de correspondre et éviter la awksortie.

Ensuite, vous pouvez essayer ceci:

Fichier d'entrée:

PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP
345
PPP
%%%

Commander:

awk '1;/PPP/{if (NR>1) exit}' file

Production:

PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP
αғsнιη
la source