web-dev-qa-db-fra.com

Comment vous êtes-vous mal de passer à la ligne suivante lorsqu'une condition a été utilisée?

J'essaie d'écrire un script awk qui vérifie certaines conditions et jette les lignes de l'extérieur répondant à ces conditions.

La condition spécifique doit jeter les deux premières lignes du fichier et une ligne qui commence par le texte xyzzy:. À cette fin, j'ai codé:

awk '
    NR < 2    {}
    /^xyzzy:/ {}
              {print}'

penser que cela jetterait les lignes où l'une de ces deux conditions a été rencontrée et imprimée autrement.

Malheureusement, il semble que le print soit traité même lorsque la ligne correspond à l'un des deux autres motifs.

Existe-t-il une action C-like continue qui se déplacera sur la ligne suivante Ignorant toutes les autres vérifications de condition de la ligne actuelle?

Je suppose que je pourrait Utilisez quelque chose comme ((NR > 1) && (!/^xyzzy:/)) {print} comme la troisième règle mais qui me semble plutôt laidée.

Alternativement, y a-t-il une autre façon de faire cela?

22
paxdiablo

Utilisez le mot-clé next comme votre action

Ce mot clé est souvent utile lorsque vous souhaitez itérer plus de 2 fichiers; Parfois, c'est le même fichier que vous souhaitez traiter deux fois.

Vous verrez l'idiome suivant:

awk '
FNR==NR {  
  < stuff that works on file 1 only >
  next
}
{
  < stuff that works on file 2 only >
}' ./infile1 ./infile2
34
SiegeX