免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3289 | 回复: 10
打印 上一主题 下一主题

[文本处理] [文本处理]文本合并处理 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-08-21 09:34 来自手机 |只看该作者 |倒序浏览
本帖最后由 volwang 于 2018-08-21 13:52 编辑

好久没来chinaunix,很想念江湖朋友。最近又遇到文本处理的任务,还是请各位江湖高手帮帮忙哦。
输入:
三个文本,数据结构都是两列,
文本1,命名text1:
filename  version
file1   A
file2   B
file3   C
file1   B
..   ..
文本2,命名text2:
filename version
file1  C
file1  D
file2  D
file5  E
....

文本3,命名text3:
filename version
file1  E
file1  F
file2  G
file4 D
file5  R
....
每个文本里,同一文件可能有多个版本
每个文件里,有相同的文件名存在
三文件行数较多,都需要遍历首行,发现相同文件名合并输出
没有版本信息用“/”代替

输出:
文件名    文本1中版本   文本2中版本  文本3中版本
file1             A,B             C,D     E,F
file2                B               D        G
file3               C                /            /
file4                /                /            D
file5                /                E          R
.. ..

多谢。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2018-08-21 09:50 来自手机 |只看该作者
三个文件里有相同的文件名存在

论坛徽章:
0
3 [报告]
发表于 2018-08-21 11:30 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2018-08-21 11:30 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2018-08-21 12:03 来自手机 |只看该作者
@本友会机友会摄友会,谢谢回复,感觉这个方法效率高,但还是不会用。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2018-08-21 15:14 |只看该作者
希望朋友们帮看看

论坛徽章:
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
7 [报告]
发表于 2018-08-21 16:36 |只看该作者
回复 1# volwang


  1. awk 'BEGIN{printf("文件名 文件1版本 文件2版本 文件3版本\n")}FNR>1{a[$1" "FILENAME]=a[$1" "FILENAME]?a[$1" "FILENAME]!~"/"?a[$1" "FILENAME]","$2:$2:$2;for(i=1;i<=3;i++){if(!a[$1" "ARGV[i]]){a[$1" "ARGV[i]]="/"}}}END{for(i in a){split(i,b);c[b[1]]=c[b[1]]?c[b[1]]" "a[i]:a[i]}{for(j in c){print j,c[j]}}}' 1 2 3
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2018-08-21 21:16 |只看该作者
回复 7# wh7211

谢谢回帖,用前面的文本做输入,能得到输出。
我替换成真实的输入,发现有一行异常数据:
A ,,,,,, / /

然后其他行多乱了,本来是第2列的出现在第2、3、4列。可能是我的文件名格式有关系。能否改良下或者排错。
再次感谢。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2018-08-21 21:25 |只看该作者
回复 7# wh7211

期望得到的输出:
文件名    文本1中版本   文本2中版本  文本3中版本
file1             A,B             C,D     E,F
file2                B               D        G
file3               C                /            /
file4                /                /            D
file5                /                E          R
运行你提供的脚本,输出:
文件名    文本1中版本   文本2中版本  文本3中版本
file1             A,B             C,D     E,F
file2                /               D        G
file2              B                 /           /
file3               C                /            /
file4                /                /            D
file5                /                E          R
综上,不应出现2行file2。


论坛徽章:
0
10 [报告]
发表于 2018-08-22 13:46 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP