免费注册 查看新帖 |

Chinaunix

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

如何按某列合并两个文件  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-10-15 13:40 |只看该作者 |倒序浏览
有两个文件,分别是: 文件1
代号 帐号
和 文件2
代号 姓名

如何合并两个文件:
代号 帐号 姓名

注意文件1里代号并不能全部在文件2里找到。而且数据量很大。

请问怎么做呢?谢!

论坛徽章:
0
2 [报告]
发表于 2003-10-15 13:59 |只看该作者

如何按某列合并两个文件

  1. cat f1
  2. 101 aaa
  3. 102 bbb
  4. 103 ccc
  5. cat f2
  6. 101 aaaaaaa
  7. 103 bbbbbbb
  8. 104 ddddddd

  9. cat t.sh
  10. cat f1 f2 |awk '{print $1}'|sort|uniq >c1
  11. while read line;do
  12.         num1=`grep "$line" f1|awk '{print $2}'`
  13.         num2=`grep "$line" f2|awk '{print $2}'`
  14.         echo $line $num1 $num2|awk '{printf "%s %s %s \n",$1,$2,$3}'
  15. done <c1
  16. rm -f c1

  17. sh t.sh
  18. 101 aaa aaaaaaa
  19. 102 bbb  
  20. 103 ccc bbbbbbb
  21. 104 ddddddd  
复制代码

论坛徽章:
0
3 [报告]
发表于 2003-10-15 14:09 |只看该作者

如何按某列合并两个文件

  1. cat f1
  2. 101 aaa
  3. 102 bbb
  4. 103 ccc
  5. cat f2
  6. 101 aaaaaaa
  7. 103 bbbbbbb
  8. 104 ddddddd

  9. cat t.sh
  10. cat f1 f2 |awk '{print $1}'|sort|uniq >c1
  11. while read line;do
  12.         num1=`grep "$line" f1|awk '{print $2}'`
  13.         num2=`grep "$line" f2|awk '{print $2}'`
  14.         echo $line $num1 $num2|awk '{printf "%s %s %s \n",$1,$2,$3}'
  15. done <c1
  16. rm -f c1

  17. sh t.sh
  18. 101 aaa aaaaaaa
  19. 102 bbb  
  20. 103 ccc bbbbbbb
  21. 104 ddddddd  
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-10-15 14:40 |只看该作者

如何按某列合并两个文件

  1. join -a 1 -a 2 a1 a2
  2. 101 aaa  aaaaaaa
  3. 102 bbb
  4. 103 ccc  bbbbbbb
  5. 104 ddddddd
复制代码

论坛徽章:
0
5 [报告]
发表于 2003-10-15 14:45 |只看该作者

如何按某列合并两个文件

http://chinaunix.net/forum/viewtopic.php?t=157686


和俺原来的问题差不多,你可以参考一下...........

论坛徽章:
0
6 [报告]
发表于 2003-10-16 07:22 |只看该作者

如何按某列合并两个文件

谢谢诸位学长!
请问,要把位置对齐,该如何办?hwhcom的方法我想些个if..else..就可以了,请问admirer,怎么办?
101 aaa  aaaaaaa
102 bbb
103 ccc  bbbbbbb
104 (空格)ddddddd

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2003-10-16 07:52 |只看该作者

如何按某列合并两个文件

原帖由 "dewflower" 发表:
谢谢诸位学长!
请问,要把位置对齐,该如何办?hwhcom的方法我想些个if..else..就可以了,请问admirer,怎么办?
101 aaa  aaaaaaa
102 bbb
103 ccc  bbbbbbb
104 (空格)ddddddd

谁跟谁对齐?

论坛徽章:
0
8 [报告]
发表于 2003-10-16 08:51 |只看该作者

如何按某列合并两个文件

我是指104在文件1里没有,希望用空格代替,即104的ddddddd 和103的bbbbbbb对齐。
多谢了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2003-10-16 09:27 |只看该作者

如何按某列合并两个文件

  1. join -a 1 -a 2 a1 a2 |awk '{if(length($2)>3){printf"%s       %s",$1,$2}else{print}}'
  2. 101 aaa  aaaaaaa
  3. 102 bbb
  4. 103 ccc  bbbbbbb
  5. 104      ddddddd
复制代码

论坛徽章:
0
10 [报告]
发表于 2003-10-18 00:40 |只看该作者

如何按某列合并两个文件

谢谢admirer.
好像还可以用join -e, 但弄不出。不管怎么样,上面的代码管用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP