免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hsinxx
打印 上一主题 下一主题

[文本处理] 求助,请教大神awk计算问题 [复制链接]

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
11 [报告]
发表于 2018-12-10 11:52 |只看该作者
本帖最后由 wh7211 于 2018-12-10 11:54 编辑

回复 10# hsinxx

多行的计算规则是什么?
文件:
  1. 56055|10000|1000|10
  2. 56055|1579|1000|2
  3. 56055|2000|1000|1
复制代码

结果:
  1. 56055|13579|3000;2000;1000;1000;1000;1000;1000;1000;1000;1000|10
复制代码

论坛徽章:
0
12 [报告]
发表于 2018-12-10 12:19 |只看该作者
多行的计算规则跟2-3行的一样,只要$1相同,$2相加,$3根据$4的值相加。如 $1有4行相同,$4的值分别为1、2、10、11的话,那$3里的值以;分隔符的第一列的值为四行的$3相加($4值为1、2、10、11的$3相加),第二列值为($4值为2、10、11的$3相加)三行的$3相加,第三列值为($4值为10、11的$3相加)两行的$3相加,第四列值为($4值为10、11的$3相加)两行的$3相加。以此类推$3以;分隔符打印11列。$4的值不固定不会等于0。
56055|10000|1000|10
56055|1579|1000|2
56055|2000|1000|1
56055|11000|1000|11

论坛徽章:
0
13 [报告]
发表于 2018-12-10 12:37 |只看该作者
回复 11# wh7211

结果文件$3的计算规则,根据$4的值计算,$1相同的行,$4的值为多少,$3就相加几次。如第一行为数据$4为1、第二行为数据$4为3,第三行为数据$4为5。那$3第一列的值就为三行$3数据相加,第二列值为二、三行$3数据相加,第三列值为二、三行$3数据相加,第四、五列值之间打印第三行$3的值。

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
14 [报告]
发表于 2018-12-10 19:34 |只看该作者
本帖最后由 wh7211 于 2018-12-11 19:09 编辑

回复 13# hsinxx


<<<awk4.0+
  1. cat 1
  2. 56055|10|1|11
  3. 56055|20|2|8
  4. 56055|30|3|5
  5. 56055|40|4|3
  6. 56055|50|5|1
  7. 56056|60|6|3
  8. 56057|70|7|1
  9. 56058|80|8|2
  10. 56058|90|9|2

  11. awk -F"|" '{++a;b[$1]+=$2;c[$1][a]=c[$1][a-1]+$3;d[$1][a]=$4;e[$1]=e[$1]>$4?e[$1]:$4;f[$1]=$0}END{for(i in c){if(length(c[i])>2){for(j in c[i]){for(k=1;k<=d[i][j]-d[i][j+1];k++){g[j]=g[j]?g[j]","c[i][j]:c[i][j]}};PROCINFO["sorted_in"]="@ind_num_desc";for(h in g){m[i]=m[i]?m[i]","g[h]:g[h]};print i"|"b[i]"|"m[i]"|"e[i]}else{print f[i]};delete g}}' 1
  12. 56055|150|15,10,10,6,6,3,3,3,1,1,1|11
  13. 56056|60|6|3
  14. 56057|70|7|1
  15. 56058|170|17,17|2
复制代码

论坛徽章:
0
15 [报告]
发表于 2018-12-11 12:12 |只看该作者
回复 14# wh7211

大神,我这边执行不了
$ awk -F"|" '{++a;b[$1]+=$2;c[$1][a]=c[$1][a-1]+$3;d[$1][a]=$4;e[$1]=e[$1]>$4?e[$1]4;f[$1]=$0}END{for(i in c){if(length(c)>2){for(j in c){for(k=1;k<=d[j]-d[j+1];k++){g[j]=g[j]?g[j]","c[j]:c[j]}}ROCINFO["sorted_in"]="@ind_num_desc";for(h in g){m=m?m","g[h]:g[h]};print i"|"b"|"m"|"e}else{print f};delete g}}' test.unl
syntax error The source line is 1.
The error context is
                 >>> {++a;b[$1]+=$2;c[$1][ <<<
awk: The statement cannot be correctly parsed.

The source line is 1.
syntax error The source line is 1.

论坛徽章:
0
16 [报告]
发表于 2018-12-11 12:12 |只看该作者
回复 14# wh7211

$ awk -F"|" '{++a;b[$1]+=$2;c[$1][a]=c[$1][a-1]+$3;d[$1][a]=$4;e[$1]=e[$1]>$4?e[$1]4;f[$1]=$0}END{for(i in c){if(length(c)>2){for(j in c){for(k=1;k<=d[j]-d[j+1];k++){g[j]=g[j]?g[j]","c[j]:c[j]}}ROCINFO["sorted_in"]="@ind_num_desc";for(h in g){m=m?m","g[h]:g[h]};print i"|"b"|"m"|"e}else{print f};delete g}}' test.unl
syntax error The source line is 1.
The error context is
                 >>> {++a;b[$1]+=$2;c[$1][ <<<
awk: The statement cannot be correctly parsed.
The source line is 1.
syntax error The source line is 1.

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
17 [报告]
发表于 2018-12-11 15:02 |只看该作者
回复 16# hsinxx

需要awk4.0+

论坛徽章:
0
18 [报告]
发表于 2018-12-11 15:45 |只看该作者
回复 17# wh7211

我这边没有awk 4.0+的,大神没有其它办法了嘛?

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
19 [报告]
发表于 2018-12-11 16:13 |只看该作者
回复 18# hsinxx


你是否可以下载并编译安装awk4.0+

论坛徽章:
0
20 [报告]
发表于 2018-12-11 16:44 |只看该作者
回复 19# wh7211

唉  客户设备,生产安全,不能随意安装。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP