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 print
açã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.)