免费注册 查看新帖 |

Chinaunix

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

日志合并问题请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-11 14:24 |只看该作者 |倒序浏览
现在手头有很多的apache日志
文件名像这样的

br-mx-fc.ibb.com_access_log.1
br-mx-fc.ibb.com_access_log.2
br-mx-fc.ibb.com_access_log.3

br-mx-fc.ibb.com_ssl_access_log.1
br-mx-fc.ibb.com_ssl_access_log.2
br-mx-fc.ibb.com_ssl_access_log.3

login-br-mx-fc.ibb.com_access_log.1
login-br-mx-fc.ibb.com_access_log.2
login-br-mx-fc.ibb.com_access_log.3

pass.ibb.com_access_log.1
pass.ibb.com_access_log.2
pass.ibb.com_access_log.3

现在要将同一个域名的日志合并
合并成

br-mx-fc.ibb.com_access_log
br-mx-fc.ibb.com_ssl_access_log
login-br-mx-fc.ibb.com_access_log
pass.ibb.com_access_log

合并要用到的命令是
sort -m -t " " -k 4 -o    br-mx-fc.ibb.com_access_log  br-mx-fc.ibb.com_access_log.1 br-mx-fc.ibb.com_access_log.2 br-mx-fc.ibb.com_access_log.3

请问要如何合并。
想了很久写不出来

日志不知这些,不过文件名都是这种格式的

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2012-07-11 14:41 |只看该作者
回复 1# tianer
  1. 没测试
  2.     awk 'BEGIN{cmd="sort -m -t\" \" -k4 -o ";while("ls *"|getline line){if(!a[b=gensub(/(.*)\.[0-9]/,"\\1",1,line)]++)system (cmd b " "b"*")}}'
复制代码

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
3 [报告]
发表于 2012-07-11 15:39 |只看该作者
  1. ls -1|awk -F . '!a[$1]++{system ("sort -m -t \" \" -k 4 -o "$1" "$1".*")}'
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-07-11 15:48 |只看该作者
本帖最后由 personball 于 2012-07-11 16:24 编辑

cat file1 file2 >file3  
是这意思?
好吧,要排序输出,是蛮复杂的

折腾了一把
每行输出sort要用的参数
  1. personball@vostro:logdeal$ls|xargs -n 1|awk -F_ '{t=$0;$NF="";$(NF-1)=$(NF-1)"_log";a[$0]=a[$0]" "t;}END{FRS=".";for(i in a){print i a[i]}}'
  2. b.c.d_log  b.c.d_log.1 b.c.d_log.2 b.c.d_log.3
  3. a.b.c_log  a.b.c_log.1 a.b.c_log.2 a.b.c_log.3 a.b.c_log.4
  4. personball@vostro:logdeal$ls
  5. a.b.c_log.1  a.b.c_log.3  b.c.d_log.1  b.c.d_log.3
  6. a.b.c_log.2  a.b.c_log.4  b.c.d_log.2
  7. personball@vostro:logdeal$
复制代码
带上使用这些参数的方式  count.sh(确认参数正确)代替sort
  1. personball@vostro:logdeal$ls|xargs -n 1|awk -F_ '{t=$0;$NF="";$(NF-1)=$(NF-1)"_log";a[$0]=a[$0]" "t;}END{FRS=".";for(i in a){printf i a[i] "|"}}'|xargs -d '|' -n 1 ../count.sh
  2. b.c.d_log b.c.d_log.1 b.c.d_log.2 b.c.d_log.3
  3. a.b.c_log a.b.c_log.1 a.b.c_log.2 a.b.c_log.3 a.b.c_log.4
  4. personball@vostro:logdeal$cat ../count.sh
  5. #!/bin/bash
  6. echo $@
  7. exit 0
  8. personball@vostro:logdeal$
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-07-11 15:55 |只看该作者
回复 2# yinyuemi


    谢谢,可以的

论坛徽章:
0
6 [报告]
发表于 2012-07-11 15:57 |只看该作者
回复 3# dn833


    谢谢你的回答。
执行这条命令之后生成的新文件名是

br-mx-fc
login-br-mx
pass.ibb

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
7 [报告]
发表于 2012-07-11 16:22 |只看该作者
本帖最后由 dn833 于 2012-07-11 16:26 编辑

回复 6# tianer
  1. ls -1|awk -F ".[0-9]+$" '!a[$1]++{system ("sort -m -t \" \" -k 4 -o "$1" "$1"*")}'
复制代码
非常抱歉。。。。。刚才大意了

论坛徽章:
0
8 [报告]
发表于 2012-07-11 16:26 |只看该作者
本帖最后由 personball 于 2012-07-11 16:27 编辑
dn833 发表于 2012-07-11 15:39

ls -1|awk -F . '!a[$1]++{system ("sort -m -t \" \" -k 4 -o "$1" "$1".*")}'


这个犀利。。

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
9 [报告]
发表于 2012-07-11 16:29 |只看该作者
回复 8# personball


    那个。。。丢人了。。。看7楼的吧~刚才没用心看LZ的题目

论坛徽章:
0
10 [报告]
发表于 2012-07-11 16:48 |只看该作者
回复 9# dn833


    我倒没注意命令的执行结果是否正确,只是觉得 用星号直接wildcard  这个思路避免了一些复杂的东西
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP