몇 가지 특정 줄을 제외한 모든 필드에 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 }' ...

( 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줄과 같은 작은 파일에서 테스트할 수도 있습니다. 헤더 라인과 일치합니다.)

관련 정보