Pule as primeiras 6 linhas / linhas em um arquivo de texto com o awk

25

Como posso pular as primeiras 6 linhas / linhas em um arquivo de texto (input.txt) e processar o resto com o awk? O formato do meu script awk (program.awk) é:

BEGIN {
} 

{ 
process here
} 

END {

}

Meu arquivo de texto é assim:

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

Eu quero processar o arquivo a partir de:

0.3 3.3
1.5 2.1
.
.
.
    
por amatek 23.04.2015 / 05:48

3 respostas

42

Use um dos dois padrões:

NR>6 { this_code_is_active }

ou isto:

NR<=6 { next }
{ this_code_is_active }

Use FNR ao invés de NR se você tiver muitos arquivos como argumentos para o awk e quiser pular 6 linhas em cada arquivo.

    
por 23.04.2015 / 06:02
23

Tente:

awk 'FNR > 6 { #process here }' file
    
por 23.04.2015 / 06:01
1

Você também pode pular um número arbitrário de linhas no início ou no final do arquivo usando head ou tail programas.

Para sua pergunta concreta,

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

serve, desde que o seu arquivo program.awk seja executável. Caso contrário, você pode usar

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

Dessa forma, você poupará uma comparação para cada linha e não precisará alterar a lógica do seu código AWK.

tail começará a transmitir o texto a partir da sétima linha, pulando as seis primeiras linhas.

Isso não será um grande negócio no desempenho, especialmente se o processo de texto for simples graças ao armazenamento em cache. No entanto, arquivos longos e uso repetido no ambiente de nuvem podem economizar alguns custos.

    
por 01.09.2017 / 12:53

Tags