Como aplicar o comando awk em todos os campos, exceto algumas linhas específicas

Como aplicar o comando awk em todos os campos, exceto algumas linhas específicas

Eu tenho um arquivo onde cada linha 156780 há uma linha de cabeçalho.

Eu queria aplicar o comando awk à primeira coluna de cada linha, exceto à segunda coluna das linhas de cabeçalho.

Ou pelo menos as linhas do cabeçalho não devem ser afetadas.

Alguém pode me ajudar a fazer isso.

Eu usei o comando awk conforme fornecido abaixo

awk 'NR>2 {printf("%10i %15.8E\n",$1,$2);}' fort.74 > fort.75

Responder1

As linhas do cabeçalho atenderão à condição NR % 156780 == 0. Isso significa que você pode usar

awk 'NR % 156780 != 0 { process non-header row }' ...

... ou possivelmente

awk '(NR - 1) % 156780 != 0 { process non-header row }' ...

(como NRé 1 para a primeira linha, não zero)

Se você quiser passar pelas linhas de cabeçalho sem ser afetado:

awk '(NR - 1) % 156780 != 0 { process non-header row } (NR - 1) % 156780 == 0 { print }' ...

Ou seja, basta adicionar uma printação solitária para a condição inversa daquela que você usa para atuar nas linhas que não são de cabeçalho.

Responder2

que tal o simples:

awk '(NR==1)          { header=$0; rem="we retrieve the header content";}
     ( $0 != header ) { process non header lines here ... }'

(você pode opcionalmente adicionar um "; next" na primeira linha, mas se não, também permite testar em um arquivo pequeno, por exemplo, um com as 5 primeiras linhas do arquivo original: a segunda linha não deve processar o linha se corresponder ao cabeçalho.)

informação relacionada