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

1

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

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

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

Alguém pode me ajudar a fazer isso.

Eu usei o comando awk como dado abaixo

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

2 respostas

3

As linhas de cabeçalho cumprirão a 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ê deseja passar pelas linhas de cabeçalho não afetadas:

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

Ou seja, basta adicionar uma ação print única para a condição inversa da que você usa para atuar nas linhas sem cabeçalho.

    
por 18.04.2017 / 10:41
0

como sobre 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 que você teste em um arquivo pequeno, por exemplo, um com as 5 primeiras linhas do arquivo original: a segunda linha não deve t processar a linha se ela corresponder ao cabeçalho.)

    
por 19.04.2017 / 17:59

Tags