亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4135 | 回復(fù): 5
打印 上一主題 下一主題

[文本處理] awk 統(tǒng)計累計最大值、累計最小值 求助! [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-08-27 00:01 |只看該作者 |倒序瀏覽
本帖最后由 helpid 于 2012-08-27 13:28 編輯

大家好,今天在統(tǒng)計數(shù)據(jù)時遇到一個難點問題,希望各位能幫助解決!謝謝!

部分原始數(shù)據(jù):
  1. 09:14:00.500        3279.20        5        3279.80         29                3279.80        73        28715
  2. 09:15:00.500        3279.00        14        3279.80         9                3279.80        134        28723
  3. 09:15:01.0        3279.00        11        3279.20         24                3279.20        155        28721
  4. 09:15:01.500        3279.00        3        3279.20         15                3279.20        172        28715
  5. 09:15:02.0        3278.20        7        3278.80         7                3279.20        190        28719
  6. 09:15:02.500        3278.20        2        3278.60         1                3278.80        205        28721
  7. 09:15:03.0        3278.40        1        3278.60         25                3278.60        215        28727
  8. 09:15:03.500        3278.00        88        3278.60         13                3278.60        236        28729
  9. 09:15:04.0        3278.00        88        3278.40         12                3278.20        239        28728
  10. 09:15:04.500        3278.20        2        3278.40         12                3278.20        255        28724
  11. 09:15:05.0        3278.00        78        3278.20         1                3278.00        268        28724
  12. 09:15:05.500        3278.00        71        3278.40         10                3278.20        279        28726
  13. 09:15:06.0        3278.00        65        3278.20         14                3278.00        288        28726
  14. 09:15:06.500        3278.00        58        3278.20         16                3278.00        295        28722
  15. 09:15:07.0        3278.00        48        3278.20         5                3278.20        317        28728
  16. 09:15:07.500        3278.00        44        3278.40         8                3278.00        337        28733
  17. 09:15:08.0        3278.00        39        3278.40         8                3278.00        344        28727
  18. 09:15:08.500        3278.20        1        3278.40         7                3278.20        351        28729
  19. 09:15:09.0        3278.20        1        3278.40         5                3278.20        361        28726
  20. 09:15:09.500        3278.00        29        3278.40         4                3278.20        368        28726
復(fù)制代碼
第一步已經(jīng)實現(xiàn)了對原始數(shù)據(jù)每分鐘最大值、最小值、平均值的統(tǒng)計。我把第一次統(tǒng)計后的數(shù)據(jù)列出來:
  1. 09:19  3297.80  3296.00  3296.8
  2. 09:20  3299.00  3296.60  3297.8
  3. 09:21  3298.40  3296.20  3296.9
  4. 09:22  3299.80  3297.20  3298.4
  5. 09:23  3299.20  3296.20  3298.3
  6. 09:24  3299.00  3297.20  3298.1
復(fù)制代碼
$1: 時間, $2: 分鐘最大值, $3: 分鐘最小值, $4: 分鐘平均值

以上數(shù)據(jù)通過如下方式實現(xiàn)的:
  1. #!/bin/sh
  2. srcpath=./src/
  3. despath=./des/
  4. for file in $(ls -1 -F ${srcpath} | grep -v [/$]);do
  5. # 第一步:處理原始數(shù)據(jù)
  6. # 通過substr來截取時間字段的[小時:分鐘]
  7. # 處理后的數(shù)據(jù)格式為  time max min arg ;共4個字段
  8. # 最后把統(tǒng)計后的數(shù)據(jù)保存至目標臨時文件
  9. # 聽取群里面各位同學(xué)的建議,使用了三元運算符
  10. awk '{
  11.                 time=substr($1,1,5)
  12.                 count[time]++
  13.                 max[time]=$6>max[time]?$6:max[time]
  14.                 min[time]=(!length(min[time])||$6<min[time])?$6:min[time]
  15.                 sum[time]+=$6
  16.         }
  17.         END{
  18.                 for(i in count) {
  19.                         print i,max[i],min[i],sum[i]/count[i]
  20.                 }
  21.         }' ${srcpath}${file}|sort> ${despath}${file}_tmp
  22. done
復(fù)制代碼
說明:把以上數(shù)據(jù)做個累計最大值和累計最小值統(tǒng)計。
初始化統(tǒng)計的時候,累計最值和每分鐘最值是一樣的.
要求輸出如下格式數(shù)據(jù):
  1. 09:19  3297.80  3296.00  3296.8  3297.80  3296.00
  2. 09:20  3299.00  3296.60  3297.8  3299.00  3296.00
  3. 09:21  3298.40  3296.20  3296.9  3299.00  3296.00
  4. 09:22  3299.80  3297.20  3298.4  3299.80  3296.00
  5. 09:23  3299.20  3296.20  3298.3  3299.80  3296.00
  6. 09:24  3299.00  3297.20  3298.1  3299.80  3296.00
復(fù)制代碼
其中:
$1: 時間, $2: 分鐘最大值, $3: 分鐘最小值, $4: 分鐘平均值,  $5:累計最大值, $6:累計最小值
說明:
1、從原始數(shù)據(jù)可以看出 "09:19  3297.80  3296.00  3296.8" 這條數(shù)據(jù)是第一條數(shù)據(jù),所以統(tǒng)計初始化時,
     第一條數(shù)據(jù)的累計最大值=第一條數(shù)據(jù)的分鐘最大值= 3297.80; 第一條數(shù)據(jù)的累計最小值=第一條數(shù)據(jù)的分鐘最小值=3296.00;
2、從09:20~09:21 兩條數(shù)據(jù)可以看出09:20的分鐘最大值為3297.80  【小于】 09:21的分鐘最大值為3299.00,所以09:21的累計最大值被刷新,新的累計最大值為3299.00
3、從09:20~09:21 兩條數(shù)據(jù)可以看出09:20的分鐘最小值為3296.00  【小于】 09:21的分鐘最小值為3296.60,所以09:21的累計最小值保持不變,不會被刷新,依然是3296.00
就是說:除第一條數(shù)據(jù)的累計最大值與分鐘最大值保持一致, 累計最小值與分鐘最小值保持一致 以外,其他數(shù)據(jù)的累計最大值和累計最小值都有可能刷新。
           如果上一條數(shù)據(jù)的累計最大值【小于】當前數(shù)據(jù)的分鐘最大值,則累計最大值被刷新,否則累計最大值保持不變,不會被刷新
           如果上一條數(shù)據(jù)的累計最小值【大于】當前數(shù)據(jù)的分鐘最小值,則累計最小值被刷新,否則累計最小值保持不變,不會被刷新

題外話:實際上我是想通過一個awk來實現(xiàn)統(tǒng)計分鐘最大值、分鐘最小值、分鐘平均值、累計最大值、累計最小值的。
但目前還沒有好的思路,如您有好的想法,希望分享下~~


論壇徽章:
0
2 [報告]
發(fā)表于 2012-08-27 08:39 |只看該作者
回復(fù) 1# helpid
  1. personball@vostro:SHELL$awk 'BEGIN{max=0;min=9999;}$2>max{max=$2}$3<min{min=$3}{print $0 FS max FS min}' file
  2. 09:19  3297.80  3296.00  3296.8 3297.80 3296.00
  3. 09:20  3299.00  3296.60  3297.8 3299.00 3296.00
  4. 09:21  3298.40  3296.20  3296.9 3299.00 3296.00
  5. 09:22  3299.80  3297.20  3298.4 3299.80 3296.00
  6. 09:23  3299.20  3296.20  3298.3 3299.80 3296.00
  7. 09:24  3299.00  3297.20  3298.1 3299.80 3296.00
  8. personball@vostro:SHELL$
復(fù)制代碼

論壇徽章:
0
3 [報告]
發(fā)表于 2012-08-27 12:56 |只看該作者
回復(fù) 2# personball


    謝謝您的解答!

論壇徽章:
0
4 [報告]
發(fā)表于 2012-08-27 13:06 |只看該作者
以下是群里面winway給出的方法:
  1. awk 'NR==1{max=$2;min=$3}{max=max<$2?$2:max;min=min>$3?$3:min;$5=max;$6=min}1' file
復(fù)制代碼
下面是完整的腳本:
#awk 統(tǒng)計最大值、最小值、平均值、累計最大值、累計最小值
  1. #!/bin/sh
  2. srcpath=./src/
  3. despath=./des/
  4. for file in $(ls -1 -F ${srcpath} | grep -v [/$]);do
  5. # 第一步:處理原始數(shù)據(jù)
  6. # 通過substr來截取時間字段的[小時:分鐘]
  7. # 處理后的數(shù)據(jù)格式為  time max min arg ;共4個字段
  8. # 最后把統(tǒng)計后的數(shù)據(jù)保存至目標臨時文件
  9. # 聽取群里面各位同學(xué)的建議,使用了三元運算符
  10. awk '{
  11.                 time=substr($1,1,5)
  12.                 count[time]++
  13.                 max[time]=($6>max[time])?$6:max[time]
  14.                 min[time]=(!length(min[time])||$6<min[time])?$6:min[time]
  15.                 sum[time]+=$6
  16.         }
  17.         END{
  18.                 for(i in count) {
  19.                         print i,max[i],min[i],sum[i]/count[i]
  20.                 }
  21.         }' ${srcpath}${file}|sort> ${despath}${file}_tmp

  22. # 第二步:進一步處理統(tǒng)計后的數(shù)據(jù),統(tǒng)計出累計最大值和累計最小值
  23. # 這里加上了標題
  24. # 處理后的數(shù)據(jù)格式為  time max min arg amax amin ;共6個字段
  25. # 最后把統(tǒng)計后的數(shù)據(jù)保存至目標文件,并刪除臨時文件
  26. # 聽取群里面各位同學(xué)的建議,使用了三元運算符
  27. awk 'BEGIN{
  28.                 print "=Time= =Max= =Min= =Arg= =AMax= =AMin="
  29.         }
  30.         NR==1{
  31.                 amax=$2
  32.                 amin=$3
  33.         }{
  34.                 amax=amax<$2?$2:amax
  35.                 amin=amin>$3?$3:amin
  36.                 $5=amax
  37.                 $6=amin
  38.         }1' ${despath}${file}_tmp|column -t > ${despath}${file} && \
  39.         rm -rf ${despath}${file}_tmp
  40. done
復(fù)制代碼

論壇徽章:
3
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亞洲杯之阿曼
日期:2015-04-07 20:00:59
5 [報告]
發(fā)表于 2012-08-27 14:39 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
0
6 [報告]
發(fā)表于 2012-08-27 15:07 |只看該作者
回復(fù) 5# zooyo


    我還得跟zooyo多多學(xué)習(xí)呢
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP