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

0

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 / 06:01

1 resposta

1

Uso:

BEGIN {
} 

NR>6{ 
process here
} 

END {

}

No awk, NR é o número da linha. Para pular o processamento para os seis primeiros, adicionamos a condição NF>6 . Quando esta condição é falsa, o que é para as primeiras seis linhas, as linhas não são processadas.

Processando vários arquivos

Suponha que temos uma pasta cheia de arquivos de texto chamados 000.txt para 181.txt. Aqui está um exemplo de processamento de todos eles com o mesmo script awk e enviá-los para os respectivos arquivos de saída (output000.txt - output181.txt):

awk 'NR>6{print>("output" FILENAME)}' {000..181}.txt

Se estivermos usando bash , então {000..181}.txt será expandido para os nomes dos nossos 182 arquivos de entrada.

No awk (isso pode requerer o GNU awk), FILENAME é o nome do arquivo de entrada no qual o awk está atualmente trabalhando. Assim, ("output" FILENAME) é o nome do nosso arquivo de saída atual.

Destinado apenas como exemplo, o acima simplesmente imprime todas as seis primeiras linhas do arquivo de entrada para o arquivo de saída. Programas mais complicados usariam os mesmos princípios.

Extra: Para processar todos os arquivos no diretório, independentemente do nome do arquivo, use:

awk 'NR>6{print>("output" FILENAME)}' *
    
por 23.04.2015 / 06:11

Tags