몇 가지 특정 행을 제외한 모든 필드에 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줄이 있는 파일)에서 테스트할 수도 있습니다. 두 번째 줄은 다음을 처리해서는 안 됩니다. 헤더와 일치하면 줄을 이룹니다.)

관련 정보