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
.
.
.
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.
Essayer:
awk 'FNR > 6 { #process here }' file
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.
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