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

Chinaunix

標(biāo)題: 數(shù)據(jù)連接 [打印本頁]

作者: gdutllf2006    時(shí)間: 2011-05-30 23:38
標(biāo)題: 數(shù)據(jù)連接
原文件格式類似如下:
節(jié)點(diǎn)號(hào)|beginnumber|endnumber|counts|
106|3363120000|3363129999|10000|
106|3363130000|3363139999|10000|
106|3363140000|3363149999|10000|
106|3363150000|3363159999|10000|
106|3363160000|3363199999|40000|
106|3363200000|3363209999|10000|
106|3363210000|3363239999|30000|
106|3363240000|3363249999|10000|
106|3363250000|3363259999|10000|
106|3363260000|3363269999|10000|
106|3363270000|3363299999|30000|
106|3368440000|3368499999|60000|
106|3368560000|3368579999|20000|
310|3337000000|3337000100|101|
310|3337000102|3337004103|4002|
310|3337004104|3337004104|1|
310|3337004105|3337006110|2006|
310|3337006111|3337006111|1|
310|3337006112|3337009999|3888|
310|3337010000|3337039999|30000|
310|3337050000|3337289999|240000|
310|3337300000|3337319999|20000|
310|3337330000|3337369999|40000|
310|3337390000|3337399999|10000|
310|3337410000|3337599999|190000|
310|3337710000|3337729999|20000|
310|3337740000|3337999999|260000|
310|3338320000|3338329999|10000|
310|3342500000|3342599999|100000|
310|3342610000|3342849999|240000|
310|3342870000|3342919999|50000|
310|3342950000|3342959999|10000|
310|3362120960|3362120961|2|
311|3313460000|3313460099|100|
311|3313460102|3313469999|9898|
311|3313470000|3313499999|30000|
311|3313500000|3313500101|102|
311|3313500102|3313500102|1|
311|3313500103|3313599999|99897|
311|3313600000|3313658116|58117|
311|3313658117|3313658117|1|
311|3313658118|3313699999|41882|
311|3313700000|3313799999|100000|
311|3319760000|3319769999|10000|
311|3322101921|3322101921|1|
311|3343003347|3343003347|1|
311|3362120962|3362120963|2|

現(xiàn)在需要寫個(gè)腳本進(jìn)行合并,將節(jié)點(diǎn)號(hào)相同的連續(xù)號(hào)段合起來,并且記錄數(shù)也要加起來。
如:
106|3363120000|3363129999|10000|
106|3363130000|3363139999|10000|

=>
106|3363120000|3363139999|20000|

注意節(jié)點(diǎn)號(hào)不同的不能合并,如
310|3362120960|3313459999|2|
311|3313460000|3313460099|100|

不能合并
作者: ziyunfei    時(shí)間: 2011-05-31 00:23
  1. awk -F"|" 'NR==1{print;next}{a[$1]?a[$1]>$2?a[$1]=$2:0:a[$1]=$2;b[$1]?b[$1]<$3?b[$1]=$3:0:b[$1]=$3;c[$1]+=$4}END{for(i in a){print i FS a[i] FS b[i] FS c[i] FS}}' file
復(fù)制代碼

作者: Estwind    時(shí)間: 2011-05-31 01:43
是要求這樣嗎,寫的有點(diǎn)丑陋了

  1. # cat file
  2. 106|3363120000|3363129999|10000|
  3. 106|3363130000|3363139999|10000|
  4. 310|3362120960|3313459999|2|
  5. 311|3313460000|3313460099|100|
  6. 106|3363110000|3336311001|1|

  7. #  awk -F "|" '{if(!a[$1]){a[$1]=$1;b[$1]=$2;c[$1]=$3;d[$1]=$4}else{b[$1]=$2<b[$1]?$2:b[$1];c[$1]=$3<c[$1]?c[$1]:$3;d[$1]+=$4}}END{for(i in a)printf "%s|%s|%s|%s|\n",a[i],b[i],c[i],d[i]}' file
  8. 310|3362120960|3313459999|2|
  9. 311|3313460000|3313460099|100|
  10. 106|3363110000|3363139999|20001|
復(fù)制代碼

作者: ywlscpl    時(shí)間: 2011-05-31 08:29
311|3313460000|3313460099|100|
311|3313460102|3313469999|9898|
311|3313470000|3313499999|30000|

這個(gè)如何合并?
311|3313460000|3313460099|100|
311|3313460102|3313499999|39898|
還是
311|3313460000|3313499999|39998|
作者: zooyo    時(shí)間: 2011-05-31 22:46
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: gdutllf2006    時(shí)間: 2011-06-01 02:30
311|3313460000|3313460099|100|
311|3313460102|3313469999|9898|
311|3313470000|3313499999|30000|

...
ywlscpl 發(fā)表于 2011-05-31 08:29



   這個(gè)不能連接在一起,合并的要求是: 數(shù)字上連續(xù),上一行的結(jié)束+1=下一行的開始,

看來用awk之類的實(shí)現(xiàn)起來,還是不太容易,同事用perl寫了個(gè),可用. 對(duì)perl不懂,沒來得及研究.
作者: yinyuemi    時(shí)間: 2011-06-01 03:35
本帖最后由 yinyuemi 于 2011-06-01 04:40 編輯

回復(fù) 6# gdutllf2006


是這個(gè)么?
P.S. 你之前問題的描述不夠明確,大家不好給出答案, awk的功能很強(qiáng)大,"只有想不到,沒有做不到"
  1. awk -F'|' '
  2.         {node_[$1]}
  3.         {
  4.                 if($2==end+1){
  5.                         end=$3;sum+=$4}
  6.                 else
  7.                         {begin_[node"|"++p]=begin;end_[node"|"p]=end;sum_[node"|"p]=sum;begin=$2;end=$3;sum=$4;node=$1}
  8.                         }
  9.         END{for(i=2;i<p;i++) for(j in node_) if( j"|"i in sum_) print j FS begin_[j"|"i] FS end_[j"|"i] FS sum_[j"|"i]}
  10. ' rawdata <(echo "")

  11. 106|3363120000|3363299999|180000
  12. 106|3368440000|3368499999|60000
  13. 106|3368560000|3368579999|20000
  14. 310|3337000000|3337000100|101
  15. 310|3337000102|3337039999|39898
  16. 310|3337050000|3337289999|240000
  17. 310|3337300000|3337319999|20000
  18. 310|3337330000|3337369999|40000
  19. 310|3337390000|3337399999|10000
  20. 310|3337410000|3337599999|190000
  21. 310|3337710000|3337729999|20000
  22. 310|3337740000|3337999999|260000
  23. 310|3338320000|3338329999|10000
  24. 310|3342500000|3342599999|100000
  25. 310|3342610000|3342849999|240000
  26. 310|3342870000|3342919999|50000
  27. 310|3342950000|3342959999|10000
  28. 310|3362120960|3362120961|2
  29. 311|3313460000|3313460099|100
  30. 311|3313460102|3313799999|339898
  31. 311|3319760000|3319769999|10000
  32. 311|3322101921|3322101921|1
  33. 311|3343003347|3343003347|1
  34. 311|3362120962|3362120963|2
復(fù)制代碼

作者: ywlscpl    時(shí)間: 2011-06-01 08:34
awk是流程完備的腳本語言(循環(huán)、判斷、自定義函數(shù)),gnu awk更是有很多強(qiáng)大的內(nèi)置函數(shù)
本身設(shè)計(jì)為數(shù)據(jù)處理的專用利器,樓主這道題對(duì)awk來說并不算難
作者: jason680    時(shí)間: 2011-06-01 10:23
回復(fù)  gdutllf2006


是這個(gè)么?
P.S. 你之前問題的描述不夠明確,大家不好給出答案, awk的功能很強(qiáng)大 ...
yinyuemi 發(fā)表于 2011-06-01 03:35


可化簡(jiǎn)如下....
$ awk -F'|' '
  BEGIN{OFS="|"}
  NR==1{A=$0;N=$1;next}
  {   
      if(($1!=N)||($2!=end+1)){print A;A=$0;N=$1;beg=$2;end=$3;cnt=$4;next}
      end=$3;cnt+=$4;$4=cnt;A=$0
  }
  END{print A}
  ' combine.txt




$ awk -F'|' 'BEGIN{OFS="|"}NR==1{A=$0;N=$1;next}{if(($1!=N)||($2!=end+1)){print A;A=$0;N=$1;beg=$2;end=$3;cnt=$4;next}end=$3;cnt+=$4;$4=cnt;A=$0}END{print A}' combine.txt
節(jié)點(diǎn)號(hào)|beginnumber|endnumber|counts|
106|3363270000|3363299999|180000|
106|3368440000|3368499999|60000|
106|3368560000|3368579999|20000|
310|3337000000|3337000100|101|
310|3337010000|3337039999|39898|
310|3337050000|3337289999|240000|
310|3337300000|3337319999|20000|
310|3337330000|3337369999|40000|
310|3337390000|3337399999|10000|
310|3337410000|3337599999|190000|
310|3337710000|3337729999|20000|
310|3337740000|3337999999|260000|
310|3338320000|3338329999|10000|
310|3342500000|3342599999|100000|
310|3342610000|3342849999|240000|
310|3342870000|3342919999|50000|
310|3342950000|3342959999|10000|
310|3362120960|3362120961|2|
311|3313460000|3313460099|100|
311|3313700000|3313799999|339898|
311|3319760000|3319769999|10000|
311|3322101921|3322101921|1|
311|3343003347|3343003347|1|
311|3362120962|3362120963|2|
作者: gdutllf2006    時(shí)間: 2011-06-04 17:48
嗯,多謝各位老大,
每天的工作就是跟這些數(shù)據(jù)文件,數(shù)據(jù)庫打交道,
對(duì)awk的使用還不夠。

對(duì)需要處理幾行之間的關(guān)系的時(shí)候,還不知道如何使用awk.

學(xué)習(xí)了




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2