免费注册 查看新帖 |

Chinaunix

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

[文本处理] [已解决] 求 两个文件合并(指定关建列)有点复杂! [复制链接]

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
11 [报告]
发表于 2016-06-22 17:56 |只看该作者
回复 8# chenteng168

  1. awk -F\| 'NR==FNR{s1=$3;for(i=4;i<=NF;i++)if(length($i))s1=s1""FS$i;a[$1FS$2]=s1;if(FNR==1){d1="0.0";for(i=4;i<=NF;i++)if(length($i))d1=d1""FS"0.0"};next} {print $0(length(a[$1FS$2])?a[$1FS$2]:d1)FS;delete a[$1FS$2];if(FNR==1){d2="0.0";for(i=4;i<=NF;i++)if(length($i))d2=d2""FS"0.0"}} END{for(i in a)print i""FS""d2""FS""a[i]""FS}' b.txt a.txt
  2. A0001|101|0.1|0.3|1.1|1.2|1.3|
  3. A0002|102|1.1|1.2|1.4|1.8|1.9|
  4. A0003|102|1.1|1.4|0.0|0.0|0.0|
  5. A0004|102|0.0|0.0|1.1|1.2|1.3|
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
12 [报告]
发表于 2016-06-22 18:49 |只看该作者
回复 1# chenteng168
a、b两个文件只是个例子,实际中两个文件中有N 列,但关键列只有两列

感觉是你没把问题描述清楚, 只是说 a, b 两个文件有 N 列, 却没有告知缺失的一方如何个补齐法, 怎能怪大家回帖有问题?

   

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
13 [报告]
发表于 2016-06-23 13:16 |只看该作者
本帖最后由 jcdiy0601 于 2016-06-23 13:19 编辑


awk 'BEGIN{FS="|"}NR==FNR{a[$1" "$2]=a[$1" "$2]" "$3" "$4}NR>FNR{a[$1" "$2]=a[$1" "$2]" "$3" "$4" "$5}END{for(i in a)print i,a}' 1 2
A0004 102  1.1 1.2 1.3
A0003 102  1.1 1.4
A0002 102  1.1 1.2 1.4 1.8 1.9
A0001 101  0.1 0.3 1.1 1.2 1.3

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
14 [报告]
发表于 2016-06-23 13:16 |只看该作者
本帖最后由 jcdiy0601 于 2016-06-23 13:18 编辑

awk 'BEGIN{FS="|"}NR==FNR{a[$1" "$2]=a[$1" "$2]" "$3" "$4}NR>FNR{a[$1" "$2]=a[$1" "$2]" "$3" "$4" "$5}END{for(i in a)print i,a}' 1 2
A0004 102  1.1 1.2 1.3
A0003 102  1.1 1.4
A0002 102  1.1 1.2 1.4 1.8 1.9
A0001 101  0.1 0.3 1.1 1.2 1.3

论坛徽章:
0
15 [报告]
发表于 2016-06-23 15:55 |只看该作者
谢谢各位大神,搞定了

论坛徽章:
0
16 [报告]
发表于 2016-06-27 16:19 |只看该作者
回复 11# Herowinter


    现在要的要求{
以下两个文件以“|”分割前两列为关建列,需要把b.txt的内容合并到a.txt里面,两个文件可能出现a.txt的关建列不在b.txt,b.txt的关建列不在a.txt中,不在的一方用0.0代替(注:a、b两个文件只是个例子,实际中两个文件中有N 列N 行,但关键列只有第一列)
a.txt
A0001|0.1|0.3|
A0002|1.1|1.2|
A0003|1.1|1.4|
b.txt
A0001|1.1|1.2|1.3|
A0002|1.4|1.8|1.9|
A0004|1.1|1.2|1.3|
最终生成以下结果
A0001|0.1|0.3|1.1|1.2|1.3|
A0002|1.1|1.2|1.4|1.8|1.9|
A0003|1.1|1.4|0.0|0.0|0.0|
A0004|0.0|0.0|1.1|1.2|1.3|
不知道怎么改你这个命令:
awk -F\| 'NR==FNR{s1=$3;for(i=4;i<=NF;i++)if(length($i))s1=s1""FS$i;a[$1FS$2]=s1;if(FNR==1){d1="0.0";for(i=4;i<=NF;i++)if(length($i))d1=d1""FS"0.0"};next} {print $0(length(a[$1FS$2])?a[$1FS$2]:d1)FS;delete a[$1FS$2];if(FNR==1){d2="0.0";for(i=4;i<=NF;i++)if(length($i))d2=d2""FS"0.0"}} END{for(i in a)print i""FS""d2""FS""a""FS}' b.txt a.txt

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
17 [报告]
发表于 2016-06-27 16:29 |只看该作者
回复 16# chenteng168

我回你另外一个贴了,帮你改好了。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP