免费注册 查看新帖 |

Chinaunix

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

awk转换的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-12 11:32 |只看该作者 |倒序浏览
大家好 又来麻烦大家了

数据为5列
china baidu 172.27.1.84 8183 tomcat3
usa  sina 172.27.1.84 8183 tomcat3
china baidu 172.27.1.84 8183 tomcat2
usa  sina 172.27.1.84 8183 tomcat2
china baidu 172.27.1.84 8184 tomcat3
usa  sina 172.27.1.84 8184 tomcat3
china baidu 172.27.1.84 8182 tomcat2
usa  sina 172.27.1.84 8182 tomcat2
china baidu 192.168.1.1 8182 tomcat2
usa  sina 192.168.1.1 8182 tomcat2

想取出的结果:根据3,4,5列对1,2列进行汇总
china,usa baidu|sina 172.27.1.84 8183 tomcat3
china,usa baidu|sina 172.27.1.84 8183 tomcat3
china,usa baidu|sina 172.27.1.84 8184 tomcat3
china,usa baidu|sina 172.27.1.84 8182 tomcat2
china,usa baidu|sina 192.168.1.1 8182 tomcat2


现在的方法是分别汇总
cat test.log |awk '{sum[$3" "$4" "$5]=sum[$3" "$4" "$5]","$1} END{ for(i in sum) print sum, i}'         
cat test.log |awk '{sum[$3" "$4" "$5]=sum[$3" "$4" "$5]"|"$2} END{ for(i in sum) print sum, i}'


感觉太笨了,有没有一下取出的方法呢?

[ 本帖最后由 ccie307 于 2009-3-12 11:55 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-03-12 11:35 |只看该作者
如果只有这四行,手工吧

如果更多,请说明详细的规则

论坛徽章:
9
2015亚冠之阿尔纳斯尔
日期:2015-09-10 16:21:162015亚冠之塔什干火车头
日期:2015-07-01 16:23:022015年亚洲杯之巴勒斯坦
日期:2015-04-20 17:19:46子鼠
日期:2014-11-13 09:51:26未羊
日期:2014-08-28 18:13:36技术图书徽章
日期:2014-02-21 09:30:15酉鸡
日期:2014-01-14 11:12:49天蝎座
日期:2013-12-09 17:56:53平安夜徽章
日期:2015-12-26 00:06:30
3 [报告]
发表于 2009-03-12 11:42 |只看该作者
原帖由 welcome008 于 2009-3-12 11:35 发表
如果只有这四行,手工吧

如果更多,请说明详细的规则

我也没看出有什么规则

论坛徽章:
0
4 [报告]
发表于 2009-03-12 11:56 |只看该作者

回复 #3 HH106 的帖子

不好意思哈
没写清楚
现在可以了吗 ?

论坛徽章:
0
5 [报告]
发表于 2009-03-12 11:58 |只看该作者
  1. [root@Mylinux tmp]# cat file
  2. china baidu 172.27.1.84 8183 tomcat3
  3. usa  sina 172.27.1.84 8183 tomcat3
  4. china baidu 172.27.1.84 8183 tomcat2
  5. usa  sina 172.27.1.84 8183 tomcat2
  6. china baidu 172.27.1.84 8184 tomcat3
  7. usa  sina 172.27.1.84 8184 tomcat3
  8. china baidu 172.27.1.84 8182 tomcat2
  9. usa  sina 172.27.1.84 8182 tomcat2
  10. china baidu 192.168.1.1 8182 tomcat2
  11. usa  sina 192.168.1.1 8182 tomcat2
  12. [root@Mylinux tmp]# awk '{a[$3" "$4" "$5]=a[$3" "$4" "$5]","$1;b[$3" "$4" "$5]=b[$3" "$4" "$5]"|"$2}END{for (i in a) {print substr(a[i],2)" "substr(b[i],2)" "i}}' file
  13. china,usa baidu|sina 172.27.1.84 8183 tomcat2
  14. china,usa baidu|sina 172.27.1.84 8182 tomcat2
  15. china,usa baidu|sina 172.27.1.84 8183 tomcat3
  16. china,usa baidu|sina 172.27.1.84 8184 tomcat3
  17. china,usa baidu|sina 192.168.1.1 8182 tomcat2
复制代码

[ 本帖最后由 ywlscpl 于 2009-3-12 12:05 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-03-12 14:14 |只看该作者
还想去下重啊!
最后一行我加了一个
china sina 192.168.1.1 8182 tomcat2

:~/monitor/bin> cat test.log
china baidu 172.27.1.84 8183 tomcat3
usa  sina 172.27.1.84 8183 tomcat3
china baidu 172.27.1.84 8183 tomcat2
usa  sina 172.27.1.84 8183 tomcat2
china baidu 172.27.1.84 8184 tomcat3
usa  sina 172.27.1.84 8184 tomcat3
china baidu 172.27.1.84 8182 tomcat2
usa  sina 172.27.1.84 8182 tomcat2
china baidu 192.168.1.1 8182 tomcat2
usa  sina 192.168.1.1 8182 tomcat2
china sina 192.168.1.1 8182 tomcat2


~/monitor/bin> cat test.log |awk '{a[$3" "$4" "$5]=a[$3" "$4" "$5]","$1;b[$3" "$4" "$5]=b[$3" "$4" "$5]"|"$2}END{for (i in a) {print substr(a,2)" "substr(b,2)" "i}}'

china,usa baidu|sina 172.27.1.84 8182 tomcat2
china,usa baidu|sina 172.27.1.84 8183 tomcat2
china,usa baidu|sina 172.27.1.84 8184 tomcat3
china,usa baidu|sina 172.27.1.84 8183 tomcat3
china,usa,china baidu|sina|sina 192.168.1.1 8182 tomcat2 可不可以让1,2列每个元素之出现一次 类似于 !a[$1]++

论坛徽章:
0
7 [报告]
发表于 2009-03-12 14:31 |只看该作者
原帖由 ccie307 于 2009-3-12 14:14 发表
还想去下重啊!
最后一行我加了一个
china sina 192.168.1.1 8182 tomcat2

:~/monitor/bin> cat test.log
china baidu 172.27.1.84 8183 tomcat3
usa  sina 172.27.1.84 8183 tomcat3
china baidu 17 ...

那就加一个判断呀:
awk '{if(a[$3" "$4" "$5] !~ $1) a[$3" "$4" "$5]=a[$3" "$4" "$5]","$1;if(b[$3" "$4" "$5] !~ $2)b[$3" "$4" "$5]=b[$3" "$4" "$5]"|"$2}....

论坛徽章:
0
8 [报告]
发表于 2009-03-12 14:52 |只看该作者
收到
谢谢哈
看来对awk还是没有理解啊!

[ 本帖最后由 ccie307 于 2009-3-12 14:55 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP