2011-12-18 37 views

Trả lời

14

Hãy thử một cái gì đó như thế này:

$ cat input 
1 
2 
3 
4 
5 
6 
2.5 
3.5 
4 
$ awk '{sum+=$1} (NR%3)==0{print sum/3; sum=0;}' input 
2 
5 
3.33333 

(Thích ứng cho khối 10-line, rõ ràng.)

+2

Bạn có thể đã sử dụng 'seq' để loại bỏ đầu vào thử nghiệm:' seq 50 | awk '{sum + = $ 1} (NR% 10) == 0 {print sum/10; sum = 0;} '' – progo

+0

Hm, nó dường như không hoạt động trong trường hợp của tôi. Thực tế là tôi đang làm việc trên các giá trị thập phân có bất cứ điều gì để làm với nó? – gablin

+0

@gablin: những gì tôi đăng hoạt động tốt với các giá trị thập phân. – Mat

1

Có thể là một cái gì đó như thế này -

[jaypal:~/Temp] seq 20 > test.file 

[jaypal:~/Temp] awk ' 
{sum+=$1} 
(NR%10==0){avg=sum/10;print $1"\nTotal: "sum "\tAverage: "avg;sum=0;next}1' test.file 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
Total: 55 Average: 5.5 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
Total: 155 Average: 15.5 

Nếu bạn không muốn tất cả các dòng được in sau đó sau đây sẽ làm việc.

[jaypal:~/Temp] awk ' 
{sum+=$1} 
(NR%10==0){avg=sum/10;print "Total: "sum "\tAverage: "avg;sum=0;next}' test.file 
Total: 55 Average: 5.5 
Total: 155 Average: 15.5 
Các vấn đề liên quan