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
첫 번째 행의 경우 0이 아니라 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줄이 있는 파일)에서 테스트할 수도 있습니다. 두 번째 줄은 다음을 처리해서는 안 됩니다. 헤더와 일치하면 줄을 이룹니다.)