web-dev-qa-db-fra.com

Sautez les 6 premières lignes / lignes dans un fichier texte avec awk

Comment 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:

BEGIN {
} 

{ 
process here
} 

END {

}

Mon fichier texte est comme ceci:

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

Je souhaite traiter le fichier à partir de:

0.3 3.3
1.5 2.1
.
.
.
45
amatek

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 de nombreux fichiers comme arguments à activer et que vous souhaitez ignorer 6 lignes dans chaque fichier.

70
Janis

Essayer:

awk 'FNR > 6 { #process here }' file
34
cuonglm

Vous pouvez également ignorer un nombre arbitraire de lignes au début ou à la fin du fichier à l'aide des programmes head ou tail.

Pour votre question concrète,

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

fera l'affaire, à condition que votre program.awk le fichier 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 commencera à diffuser du texte à partir de la septième ligne, en sautant les six premières lignes.

Les performances ne seront pas énormes, surtout si le processus 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 cloud, vous pouvez économiser certains coûts.

4
Dr. Windows

Un autre:

$ cat print_from.awk

#print 20 lines from line 6 (from your file: 0.3 3.3)
BEGIN{n=0}
/^0.3 3.3.*/ {n=NR; m=n+20}
{
  if (n > 1 && NR < m) {print $1} 
}

exécuter avec:

awk -f print_from.awk your-text-file
1
user388201