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


39

Como posso pular as 6 primeiras linhas / linhas em um arquivo de texto (input.txt) e processar o restante 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
.
.
.

Quero processar o arquivo a partir de:

0.3 3.3
1.5 2.1
.
.
.

Respostas:


59

Use um dos dois padrões:

NR>6 { this_code_is_active }

ou isto:

NR<=6 { next }
{ this_code_is_active }

Use FNR em vez de NR se você tiver muitos arquivos como argumentos para ativar e desejar pular 6 linhas em cada arquivo.


29

Experimentar:

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

4
Boa! Mas você não explicou por que isso é melhor - pois vários arquivos FNRsão o número da linha em cada arquivo, enquanto NRé o número em toda a entrada (não é um problema durante a tubulação).
Tomasz Gandor

3

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

Para sua pergunta concreta,

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

fará, desde que seu program.awkarquivo 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 texto começando na sétima linha, pulando as seis primeiras linhas.

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


Correto, mas como regra geral, deve-se evitar a tubulação quando você pode fazer isso facilmente com apenas uma ferramenta. Pense em um enorme arquivo de texto transmitindo os dois comandos apenas para remover algumas linhas.
Philippos
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.