免费注册 查看新帖 |

Chinaunix

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

文件按某一字段合并的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-22 13:44 |只看该作者 |倒序浏览
做一个测试,按某一条件分出来的汇总结果在两个文件中:
1.txt
  1.     140 上海市
  2.     131 北京市
  3.      98 山东省
  4.      83 河南省
  5.      78 广东省
  6.      62 辽宁省
  7.      53 河北省
  8.      44 天津市
  9.      39 江苏省
  10.      35 吉林省
  11.      34 湖北省
  12.      32 四川省
  13.      30 黑龙江省
  14.      29 华南理工大学
  15.      21 浙江省
  16.      21 陕西省
  17.      21 山西省
  18.      18 广东外语外贸大学
  19.      15 上海交通大学
  20.      15 美国
  21. ……
复制代码

2.txt
  1. 964 上海市
  2.     617 广东省
  3.     504 江苏省
  4.     424 湖北省
  5.     304 浙江省
  6.     240 四川省
  7.     209 福建省
  8.     207 北京市
  9.     197 湖南省
  10.     167 安徽省
  11.     145 陕西省
  12.     139 山东省
  13.     127 江西省
  14.      96 河北省
  15.      89 重庆市
  16.      87 河南省
  17.      64 云南省
  18.      51 辽宁省
  19.      50 黑龙江省
  20.      50 甘肃省
  21. ……
复制代码

前面为数值,后面为地区。
有什么简便的方法可以以地区为关键字把两个文件中的数据并到一行去?
结果类似以下的形式:
  1.     上海市 140 964
  2.     北京市 131 207
  3.      山东省 98 139
  4.      河南省 83 87
  5. ……
  6. 美国 15 0
复制代码

同一地区不一定会在两个文件中都记录,比如1.txt中的美国在2.txt中会没有。

论坛徽章:
0
2 [报告]
发表于 2005-04-22 14:41 |只看该作者

文件按某一字段合并的问题

  1. join -a1 -12 -22 <(sort -k2 1.txt) <(sort -k2 2.txt)
复制代码

这样符合要求么?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-04-22 14:48 |只看该作者

文件按某一字段合并的问题

[quote]原帖由 "一梦如是"]这样符合要求么?[/quote 发表:

佩服~~~.连进程替换都用上啦  

论坛徽章:
0
4 [报告]
发表于 2005-04-22 14:56 |只看该作者

文件按某一字段合并的问题

谢谢一梦如是,为什么提取到的数据只是一部分呢?

论坛徽章:
0
5 [报告]
发表于 2005-04-22 15:46 |只看该作者

文件按某一字段合并的问题

去看了一下join的用法,试了几个例子,是按相同行的域内容检索的,好像不能像数据库的那样,但因为两个文件里地区不一定会全部相同,所以不太满足全部的条件。

论坛徽章:
0
6 [报告]
发表于 2005-04-22 16:24 |只看该作者

文件按某一字段合并的问题

是我写的有问题,不好意思,我再看看~

论坛徽章:
0
7 [报告]
发表于 2005-04-22 16:52 |只看该作者

文件按某一字段合并的问题

  1. join -a1 -a2 -j 2 -e '0' <(sort -k2 1.txt) <(sort -k2 2.txt)
复制代码
我本来考虑,上面的代码应该就没问题了,可是奇怪为什么有的空域补0了,有的却没补,难道又是solaris8的bug,我哭
只好
  1. join -a1 -a2 -j 2 -e '0' -o1.2 2.2 1.1 2.1 6 7
复制代码
这样没问题了,但可能不太符合您的格式需要,用别的工具再处理一下吧

论坛徽章:
0
8 [报告]
发表于 2005-04-22 17:13 |只看该作者

文件按某一字段合并的问题

cat a.sh
#!/bin/sh

if [ $# -ne 2 ];then
        echo "Usage0 file1 file2"
        exit
fi

  1. cat $1 $2|awk '{print $2}'|sort|uniq|while read line;do
  2.         num1=`grep "$line" $1|awk '{print $1}'`
  3.         num2=`grep "$line" $2|awk '{print $1}'`

  4.         if [ -z "$num1" ] ;then
  5.                 echo $line $num2|awk '{printf "%-20.20s\t%10d\t%10d\n",$1,0,$2}'
  6.         elif [ -z "$num2" ] ;then
  7.                 echo $line $num1|awk '{printf "%-20.20s\t%10d\t%10d\n",$1,$2,0}'
  8.         else
  9.                 echo $line $num1 $num2|awk '{printf "%-20.20s\t%10d\t%10d\n",$1,$2,$3}'
  10.         fi
  11. done
复制代码


结果
  1. [Bossdev]$ sh a.sh 1.txt 2.txt
  2. 安徽省                           0             167
  3. 北京市                         131             207
  4. 福建省                           0             209
  5. 甘肃省                           0              50
  6. 广东省                          78             617
  7. 广东外语外贸大学                18               0
  8. 河北省                          53              96
  9. 河南省                          83              87
  10. 黑龙江省                        30              50
  11. 湖北省                          34             424
  12. 湖南省                           0             197
  13. 华南理工大学                    29               0
  14. 吉林省                          35               0
  15. 江苏省                          39             504
  16. 江西省                           0             127
  17. 辽宁省                          62              51
  18. 美国                            15               0
  19. 山东省                          98             139
  20. 山西省                          21               0
  21. 陕西省                          21             145
  22. 上海交通大学                    15               0
  23. 上海市                         140             964
  24. 四川省                          32             240
  25. 天津市                          44               0
  26. 云南省                           0              64
  27. 浙江省                          21             304
  28. 重庆市                           0              89
复制代码


就是结果的顺序与楼主的不一致

论坛徽章:
0
9 [报告]
发表于 2005-04-22 17:16 |只看该作者

文件按某一字段合并的问题

cu已经有答案了:)

http://chinaunix.net/jh/24/15789.html

论坛徽章:
0
10 [报告]
发表于 2005-04-22 18:37 |只看该作者

文件按某一字段合并的问题

谢谢楼上几位,已经和相要的结果基本一样了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP