파일에 있는 데이터 집합의 평균을 계산할 때 첫 번째 줄을 건너뛸 수 있나요?

파일에 있는 데이터 집합의 평균을 계산할 때 첫 번째 줄을 건너뛸 수 있나요?

다음 명령을 실행할 때:

awk '{T=0; for (i=1;i<=NF;i++) T+=$i; T/=NF; printf "%12.7f\n",T}'

첫 번째 줄을 건너뛸 수 있는 방법이 있나요? 어쩌면 비슷한 것일까요 NR!=1?

답변1

예, 유사 NR!=1하거나 NR > 1:

awk 'NR > 1 {T=0; for (i=1;i<=NF;i++) T+=$i; T/=NF; printf "%12.7f\n",T}'

여러 파일에 대해 이 작업을 수행하려면 대신 다음을 사용하십시오 FNR.

awk 'FNR > 1 {T=0; for (i=1;i<=NF;i++) T+=$i; T/=NF; printf "%12.7f\n",T}'

(나는 불평등이 더 명확하다고 생각합니다. 우리가 녹음에 관심이 있다는 것이 나에게 분명해졌습니다.뒤쪽에특정 기록. )

답변2

다음과 같이 명령 및 오류 처리를 최적화할 수도 있습니다.division by zero빈 행이나 숫자가 아닌 필드가 포함된 행의 경우 오류가 발생하고 열 값이 실제로 1인지 확인합니다.숫자계산과 나누기를 피하기 위해NF대신 변수를 사용하면 잘못된 결과가 나오므로 다음을 수행하세요.

테스트 입력 파일:

6 c v g
         <-- empty line
d b d s
         <-- mixed of Tabs/Spaces
1 2 3 4
5 6 7 8

주문하다:

awk '
{
    T=nf=0;
    for(i=1; i<=NF; i++) {
        nf+=($i+0==$i?1:0);
        T+=$i;
    };
    printf ("%12.7f\n", T/(nf?nf:1) );
}' infile

산출:

   6.0000000
   0.0000000
   0.0000000
   0.0000000
   2.5000000
   6.5000000

글쎄요, 첫 번째 줄은 건너뛰세요. 네 그렇게 할 수 있습니다

NR!=1 또는 NR>1단일/다중 입력에서 첫 번째 줄을 건너뛰거나
FNR!=1FNR>1입력의 첫 번째 줄을 건너뜁니다.

관련 정보