데이터 테이블에 있는 값의 평균을 계산하고 싶습니다.
데이터 매트릭스 예
S1 1 3 4 5 16 3 3 4 6 0
S2 1 6 4 5 16 3 4 6 6 0
S3 1 3 4 3 4 7 3 5 16 9
S4 0 0 4 5 6 0 0 4 5 6
아이디어는 col7
, col2
으로 나누는 col8
것 입니다 col3
.col11
col11
예상 출력
S1 0.75 0.5 0.5 0.545455 0
S2 0.75 0.4 0.6 0.545455 0
S3 0.875 0.5 0.555556 0.842105 0.692308
S4 0 0 0.5 0.5 0.5
awk 스크립트
cat TestFile | awk '{ out=$1; for(i=2;i<=6;i++) out=out"\t"$(i+5)/($i+$(i+5)); print out }'
명령 출력
S1 0.75 0.5 0.5 0.545455 0
S2 0.75 0.4 0.6 0.545455 0
S3 0.875 0.5 0.555556 0.842105 0.692308
awk: cmd. line:1: (FILENAME=- FNR=4) fatal: division by zero attempted
"0"으로 나누면 오류가 발생합니다.
0으로 나누었을 때 오류 보고 없이 "0"을 채우는 방법.
답변1
awk '{for (i=2;i<=6;i++) $i = ($(i+5)!=0? $(i+5)/($i+$(i+5)): 0); NF=6} 1' file
우리는조건식, 나누기 전에 제수를 테스트하고, 0이면 나누지 않고 값을 할당하고 오류를 발생시킵니다. 또한 처음 6개 컬럼만 인쇄할 경우에도 NF=6
레코드를 할당하여 인쇄하면 충분합니다.
Tab의도한 출력을 정렬하려면 출력 필드 구분 기호 정의를 사용 하거나 공백이 채워진 탭 모양 awk -v OFS='\t'
으로 출력을 파이프할 수 있습니다 .colun -t
S1 0.75 0.5 0.5 0.545455 0
S2 0.75 0.4 0.6 0.545455 0
S3 0.875 0.5 0.555556 0.842105 0.692308
S4 0 0 0.5 0.5 0.5