免费注册 查看新帖 |

Chinaunix

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

如何整合三个文件的内容呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-17 15:03 |只看该作者 |倒序浏览
三个文件的内容如下:

  1. [root@localhost shell]# cat index
  2. 0 112
  3. 1 16
  4. 2 320
  5. 3 336
  6. 4 48
  7. 5 80
  8. 6 96
  9. [root@localhost shell]# cat name
  10. 0  server1
  11. 1  server2
  12. 2  server3
  13. 3  server4
  14. 4  server5
  15. 5  server6
  16. 6  server7
  17. [root@localhost shell]# cat mem
  18. 16 62912
  19. 48 15728
  20. 80 34076
  21. 96 10484
  22. 112 28832
  23. 336 26212
  24. [root@localhost shell]#
复制代码


我想得到如下的效果:

  1. # cat last
  2. 0 112 server1 28832
  3. 1 16 server2 62912
  4. 2 320 server3
  5. 3 336 server4 26212
  6. 4 48 server5 15728
  7. 5 80 server6 34076
  8. 6 96 server7  10484
复制代码


请教如何呢?谢谢

论坛徽章:
0
2 [报告]
发表于 2009-06-17 15:46 |只看该作者

回复 #1 netlogon 的帖子

第一步:paste index name | awk '{$3=""}1' >notlast
第二步:
[root@localhost lianshou]# cat notlast
0 112  server1
1 16  server2
2 320  server3
3 336  server4
4 48  server5
5 80  server6
6 96  server7
第三步:
awk 'NR==FNR{a[$1]=$2;next}$2 in a{ print $0,a[$2]}!($2 in a){print}' mem notlast
0 112  server1 28832
1 16  server2 62912
2 320  server3
3 336  server4 26212
4 48  server5 15728
5 80  server6 34076
6 96  server7 10484

论坛徽章:
1
丑牛
日期:2014-08-07 17:07:05
3 [报告]
发表于 2009-06-17 15:48 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
4 [报告]
发表于 2009-06-17 15:52 |只看该作者

回复 #1 netlogon 的帖子

try

  1. awk 'ARGIND==1{n[$1]=$2}ARGIND==2{m[$1]=$2}ARGIND==3{print $0,n[$1],m[$2]}' name mem index
复制代码
老古董 该用户已被删除
5 [报告]
发表于 2009-06-17 15:56 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2009-06-17 15:57 |只看该作者
笨人的笨方法
join index name > a
sort mem > b
join -a1 -a2 -j1 2 -j2 1 a b | awk '{print $2,$1,$3,$4}'

论坛徽章:
0
7 [报告]
发表于 2009-06-17 16:24 |只看该作者
这种问题用awk处理是最合适的

论坛徽章:
0
8 [报告]
发表于 2009-06-17 17:25 |只看该作者
原帖由 ly5066113 于 2009-6-17 15:52 发表
try

awk 'ARGIND==1{n[$1]=$2}ARGIND==2{m[$1]=$2}ARGIND==3{print $0,n[$1],m[$2]}' name mem index



如果不止三个文件呢?

例如:

  1. [root@localhost shell]# cat /tmp/index
  2. 0 112
  3. 1 16
  4. 2 320
  5. 3 336
  6. 4 48
  7. 5 80
  8. 6 96
  9. [root@localhost shell]# cat /tmp/name
  10. 0       server1
  11. 1       server2
  12. 2       server3
  13. 3       server4
  14. 4       server5
  15. 5       server6
  16. 6       server7
  17. [root@localhost shell]# cat /tmp/memtatol
  18. 16 262144
  19. 48 524288
  20. 80 262144
  21. 96 262144
  22. 112 262144
  23. 336 262144
  24. [root@localhost shell]# cat /tmp/memused
  25. 16 70776
  26. 48 10484
  27. 80 34076
  28. 96 18348
  29. 112 20968
  30. 336 23592
  31. [root@localhost shell]# cat /tmp/cpuused
  32. 16 139300
  33. 17 98012
  34. 48 89978
  35. 80 103676
  36. 96 92172
  37. 112 94314
  38. 336 102839
复制代码

论坛徽章:
0
9 [报告]
发表于 2009-06-17 17:39 |只看该作者

回复 #8 netlogon 的帖子

那就再多整几个"ARGIND==xxx"做记录。

论坛徽章:
0
10 [报告]
发表于 2009-06-17 17:43 |只看该作者
原帖由 kwokcn 于 2009-6-17 17:39 发表
那就再多整几个"ARGIND==xxx"做记录。


呵呵,不明白
难道是:

  1. awk 'ARGIND==1{n[$1]=$2}ARGIND==2{m[$1]=$2}ARGIND==3{m[$1]=$2}ARGIND==4{m[$1]=$2}ARGIND==5{print $0,n[$1],m[$2]}' /tmp/name /tmp/memtatol /tmp/memused /tmp/cpuused /tmp/index
复制代码


结果好像又不对.......
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP