Ignorer les 6 premières lignes / lignes d'un fichier texte avec awk

39

Comment puis-je ignorer les 6 premières lignes / lignes d'un fichier texte (input.txt) et traiter le reste avec awk? Le format de mon script awk (program.awk) est le suivant:

BEGIN {
} 

{ 
process here
} 

END {

}

Mon fichier texte est comme ça:

0
3
5
0.1 4.3
2.0 1.5
1.5 3.0
0.3 3.3
1.5 2.1
.
.
.

Je veux traiter le fichier à partir de:

0.3 3.3
1.5 2.1
.
.
.
Amatek
la source

Réponses:

60

Utilisez l'un des deux modèles:

NR>6 { this_code_is_active }

ou ca:

NR<=6 { next }
{ this_code_is_active }

Utilisez FNR au lieu de NR si vous avez plusieurs fichiers comme arguments pour awk et que vous voulez ignorer 6 lignes dans chaque fichier.

Janis
la source
29

Essayer:

awk 'FNR > 6 { #process here }' file
cuonglm
la source
4
Bien! Mais vous n'avez pas expliqué pourquoi cela est préférable: pour plusieurs fichiers, FNRle numéro de la ligne est indiqué dans chaque fichier, tandis que NRle nombre de toutes les entrées est différent (ce n'est pas un problème lors de la création d'une tuyauterie).
Tomasz Gandor
3

Vous pouvez également ignorer un nombre arbitraire de lignes au début ou à la fin du fichier en utilisant headou des tailprogrammes.

Pour votre question concrète,

tail input.txt -n+7 | program.awk

va faire, à condition que votre program.awkfichier est exécutable. Sinon, vous pouvez utiliser

tail input.txt -n+7 | awk -f program.awk

De cette façon, vous épargnerez une comparaison pour chaque ligne et vous n'avez pas besoin de changer la logique de votre code AWK.

tail commence à diffuser du texte à partir de la septième ligne, en sautant les six premières lignes.

Ce ne sera pas un énorme problème de performances, en particulier si le traitement de texte est simple grâce à la mise en cache. Cependant, pour des fichiers longs et une utilisation répétée dans un environnement en nuage, vous pouvez économiser sur certains coûts.

Dr. Windows
la source
Correct, mais en règle générale, évitez les tuyaux lorsque vous pouvez facilement le faire avec un seul outil. Pensez à un énorme fichier texte qui passe par les deux commandes pour supprimer quelques lignes.
Philippos