Как применить команду awk ко всем полям, за исключением нескольких определенных строк

Как применить команду awk ко всем полям, за исключением нескольких определенных строк

У меня есть файл, в котором каждая 156780-я строка содержит строку заголовка.

Я хотел применить команду awk к первому столбцу каждой строки, за исключением второго столбца строк заголовка.

Или, по крайней мере, строки заголовков не должны быть затронуты.

Может ли кто-нибудь помочь мне это сделать?

Я использовал команду awk, как указано ниже.

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

решение1

Строки заголовка будут соответствовать условию NR % 156780 == 0. Это означает, что вы можете использовать

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

... или возможно

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

(как NR1 для первой строки, а не ноль)

Если вы хотите, чтобы строки заголовка не были затронуты:

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

То есть просто добавьте одно printдействие для обратного условия того, которое вы используете для действия в строках, не являющихся заголовками.

решение2

как насчет простого:

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

(Вы можете по желанию добавить «; next» в первую строку, но если нет, это также позволит вам провести тестирование на небольшом файле, например, с 5 первыми строками исходного файла: 2-я строка не должна обрабатывать строку, если она совпадает с заголовком.)

Связанный контент