У меня есть файл, в котором каждая 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 }' ...
(как NR
1 для первой строки, а не ноль)
Если вы хотите, чтобы строки заголовка не были затронуты:
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-я строка не должна обрабатывать строку, если она совпадает с заголовком.)