다음 데이터 세트에 대한 행 평균을 계산하고 있지만 아래 표시된 파일 출력을 생성하기 위해 $0의 형식을 올바르게 지정할 수 없습니다. 나는 현재 다음을 가지고 있습니다:
awk '{T=0; for (i=1;i<=NF;i++) T+=$i; T/=NF; printf "??f 6.3f\n",$0,T}' fileinput > fileoutput
파일 입력
1 2 3 4
3 3 8 8
5 4 13 12
7 5 18 16
9 6 23 20
11 7 28 24
13 8 33 28
15 9 38 32
17 10 43 36
19 11 48 40
21 12 53 44
23 13 58 48
25 14 63 52
예상되는 파일 출력
1 2 3 4 2.5
3 3 8 8 5.5
5 4 13 12 8.5
7 5 18 16 11.5
9 6 23 20 14.5
11 7 28 24 17.5
13 8 33 28 20.5
15 9 38 32 23.5
17 10 43 36 26.5
19 11 48 40 29.5
21 12 53 44 32.5
23 13 58 48 35.5
25 14 63 52 38.5
답변1
조금 번갈아가며awk
awk -F'\t' 'BEGIN {OFS=FS}{s=$1; for (i=2;i<=NF;i++) s+=$i; $(NF+1)=sprintf("%.1f", s/NF)}1' file
설정을 통해 입력 및 출력 파일 형식을 동일하게 유지하십시오 OFS=FS
( tab
파일에 a를 사용했습니다).
0으로 설정할 필요 없이 나머지를 s
설정하고 반복하기만 하면 됩니다.s=$1
for (i=2;...
그러면 sprintf
합계가 $(NF+1)
기본적으로 인쇄될 수 있습니다 $0
( OFS
즉, 1
마지막 합계).
1 2 3 4 2.5
3 3 8 8 5.5
5 4 13 12 8.5
7 5 18 16 11.5
9 6 23 20 14.5
11 7 28 24 17.5
13 8 33 28 20.5
15 9 38 32 23.5
17 10 43 36 26.5
19 11 48 40 29.5
21 12 53 44 32.5
23 13 58 48 35.5
25 14 63 52 38.5
할 수는 있지만
awk '{s=$1; for (i=2;i<=NF;i++) s+=$i; $(NF+1)=sprintf("%.1f", s/NF)}1' file | column -t
1 2 3 4 2.5
3 3 8 8 5.5
5 4 13 12 8.5
7 5 18 16 11.5
9 6 23 20 14.5
11 7 28 24 17.5
13 8 33 28 20.5
15 9 38 32 23.5
17 10 43 36 26.5
19 11 48 40 29.5
21 12 53 44 32.5
23 13 58 48 35.5
25 14 63 52 38.5
답변2
형식 문자열은 awk
printf()
C 와 동일한 규칙을 따르 printf()
므로 원칙적으로
awk '{T=0; for (i=1;i<=NF;i++) T+=$i; T/=NF; printf "%s%s%6.3f\n",$0,OFS,T}' fileinput > fileoutput
작동해야합니다.
현재 시도에 필요한 최소한의 변경 사항은 다음과 같습니다.
printf "%s %6.3f\n",$0,T
그러나 단일 공백이 아니라 a 또는 기타 항목인 경우 출력 필드 구분 기호의 실제 값을 구분 $0
하고 사용 하는 것이 좋습니다 .T
OFS
TAB