- 论坛徽章:
- 25
|
本帖最后由 wh7211 于 2018-12-12 18:29 编辑
回复 24# hsinxx
上面$1相同数据有9行,$4最大是为11,结果文件的$3应该输出11列数据。$3第一列值为$4>=1的$3数据相加,$3第二列值为$4>=2的$3数据相加,$3第三列值为$4>=3的$3数据相加,$3第四列值为$4>=4的$3数据相加,$3第五列值为$4>=5的$3数据相加,以此类推知道11列数据打印问。 - cat 1
- 56055|10|1|11
- 56055|20|2|8
- 56055|30|3|5
- 56055|40|4|2
- 56055|50|5|2
- 56055|60|6|2
- 56055|70|7|5
- 56055|80|8|2
- 56055|90|9|2
- 56056|60|6|3
- 56057|70|7|1
- 56058|80|8|2
- 56058|90|9|2
- 980618|2000|1000|2
- 980618|1000|1000|1
- 980618|1657|1000|1
- 980618|2000|1000|2
- 980618|2000|1000|2
- 980618|2000|1000|2
- 980618|2000|1000|2
- 980618|2000|1000|2
- 980618|2000|1000|2
- 980618|2000|1000|2
- 980618|2000|1000|2
- 980618|2000|1000|2
- 980618|2000|1000|2
- 980618|2000|1000|2
- 980618|2000|1000|2
- 456038|27500|2500|11
- 456038|5000|2500|2
复制代码
<<<保持源文件行记录顺序
- awk -F"|" '{++a[$1];b[$1]+=$2;c[$1""a[$1]]=$3;d[$1""a[$1]]=$4;e[$1]=e[$1]>$4?e[$1]:$4;f[$1]=$0;g[$1]=NR;h[NR]=$1}END{asort(g,m);for(i in m){n=h[m[i]];if(a[n]>1){for(j=1;j<=e[n];j++){for(k=1;k<=a[n];k++){if(d[n""k]>=j){p[n""j]+=c[n""k]}};q[n]=q[n]?q[n]","p[n""j]:p[n""j]};print n"|"b[n]"|"q[n]"|"e[n]}else{print f[n]}}}' 1
- 56055|450|45,45,13,13,13,3,3,3,1,1,1|11
- 56056|60|6|3
- 56057|70|7|1
- 56058|170|17,17|2
- 980618|28657|15000,13000|2
- 456038|32500|5000,5000,2500,2500,2500,2500,2500,2500,2500,2500,2500|11
复制代码
<<<默认方式排序
- awk -F"|" '{++a[$1];b[$1]+=$2;c[$1""a[$1]]=$3;d[$1""a[$1]]=$4;e[$1]=e[$1]>$4?e[$1]:$4;f[$1]=$0}END{for(i in e){if(a[i]>1){for(j=1;j<=e[i];j++){for(k=1;k<=a[i];k++){if(d[i""k]>=j){g[i""j]+=c[i""k]}};h[i]=h[i]?h[i]","g[i""j]:g[i""j]};print i"|"b[i]"|"h[i]"|"e[i]}else{print f[i]}}}' 1
- 56055|450|45,45,13,13,13,3,3,3,1,1,1|11
- 56056|60|6|3
- 56057|70|7|1
- 56058|170|17,17|2
- 456038|32500|5000,5000,2500,2500,2500,2500,2500,2500,2500,2500,2500|11
- 980618|28657|15000,13000|2
复制代码 |
评分
-
查看全部评分
|