다음 명령을 실행할 때:
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!=1
각 FNR>1
입력의 첫 번째 줄을 건너뜁니다.