免费注册 查看新帖 |

Chinaunix

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

这个多文件合并问题,用awk可以做么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-16 22:00 |只看该作者 |倒序浏览
在别处看到别人问的
文件格式:
file1
  1. g1.1 2
  2. g2.2 4
  3. g2.1 5
  4. g4.1 3
复制代码
file2:
  1. g1.1 2
  2. g1.2 3
  3. g4.1 4
复制代码
file3:


  1. g1.2 3
  2. g5.1 3
复制代码
要求输出, 意思是缺少的数值用"-"来补位
  1. g1.1 2 2 -
  2. g1.2 - 3 3
  3. g2.2 4 - -
  4. g2.1 5 - -
  5. g4.1 3 4 -
  6. g5.1 - - 3
复制代码
然后我的方法是:
  1. awk 'ARGIND==1{a[$1]=$0 " - -";next;}
  2. ARGIND==2{ if($1 in a)sub(/ - /, " "$2" ",a[$1]);else a[$1]=$1" - "$2" -";next; }
  3. ARGIND==3{if($1 in a)sub(/ -$/," "$2" ",a[$1]); else a[$1]=$1" - - "$2;}
  4. END{for(i in a)print a[i]}' file1 file2 file3 |sort
复制代码
后来问问题的人又加了一个条件,文件数目不一定,但是格式都相同。

我后来就给了个python script。
这个awk能解么?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2011-03-17 02:26 |只看该作者
本帖最后由 yinyuemi 于 2011-03-17 02:29 编辑

没问题,awk很强大的
  1. awk '{a[ARGIND" "$1]=$2;b[$1]=$1 }END{for(i in b) {printf i" ";for(j=1;j<=ARGIND;j++) printf "%s ", a[j" "i]?a[j" "i]:"-";print""}}' file1 file2 file3  file1 file2 file3
  2. g1.1 2 2 - 2 2 -
  3. g1.2 - 3 3 - 3 3
  4. g2.1 5 - - 5 - -
  5. g2.2 4 - - 4 - -
  6. g4.1 3 4 - 3 4 -
  7. g5.1 - - 3 - - 3
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-03-17 04:32 |只看该作者
真不错,没想到把argind当成下标。。学习了。 看来这思路是最重要的。

你不在国内吧?凌晨2点半了还发贴

论坛徽章:
0
4 [报告]
发表于 2011-03-17 07:59 |只看该作者
强大

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2011-03-17 08:31 |只看该作者
回复 3# sk1418


    呵呵,是有些时差

论坛徽章:
0
6 [报告]
发表于 2011-03-17 09:28 |只看该作者
回复 1# sk1418
  1. awk '{a[ARGIND","$1]=$2;b[$1]}END{for (i in b) {printf i;for (j=1;j<=3;j++) printf " "(a[j","i]?a[j","i]:"-");print ""}}' file1 file2 file3
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP