免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求一段shell,各位大侠帮帮忙吧! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-22 15:48 |只看该作者 |倒序浏览
现在我有一个日志,日志格式为:
文件名:logfile
内容:

12-01-01  字符串1  
12-01-02  字符串2
12-01-03  字符串2
12-01-03  字符串1
12-01-04  字符串3
12-01-05  字符串4
其中 “字符串?” 是没有任何规律的。

还有一个记录id对应 “字符串?” 对应关系的文件。文件格式为:
文件名:id.txt
内容:
id1    字符串2
id1    字符串3
id2    字符串1
id3    字符串4
id4    字符串5
其中id是唯一而且不重复的,但对应的“字符串?”可能是多个,但不重复。

现在需要以id为标识,把日志切成N个文件,N是id的个数,要求切割完的文件是:
文件名:id1.txt
内容:  
12-01-02  字符串2
12-01-03  字符串2
12-01-04  字符串3

文件名:id2.txt
内容:
12-01-01  字符串1
12-01-03  字符串1


就是把logfile中出现过的“字符串?” 按照id进行分类,然后输出到以id为名字的文件中,各位大侠求帮助!!谢谢!!




论坛徽章:
0
2 [报告]
发表于 2012-08-22 16:06 |只看该作者
回复 1# hyt123321c


    id.txt中id是唯一不重复,但是你给的例子明显有2个id1.。。。

论坛徽章:
0
3 [报告]
发表于 2012-08-22 16:12 |只看该作者
回复 2# personball
哦。。表达错误。。我指的是,对应的关系,没有重复的。就是id1,可以对应多个“字符串?”

   

论坛徽章:
0
4 [报告]
发表于 2012-08-22 16:13 |只看该作者
不戳你的表达问题了,这是不是你要的?
  1. personball@vostro:~$awk 'NR==FNR{a[$2]=$1} NR>FNR{if($2 in a)print $0 >>a[$2]".txt" }' id.txt log
  2. personball@vostro:~$cat id1.txt
  3. 12-01-02  字符串2
  4. 12-01-03  字符串2
  5. 12-01-04  字符串3
  6. personball@vostro:~$cat id2.txt
  7. 12-01-01  字符串1  
  8. 12-01-03  字符串1
  9. personball@vostro:~$
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-08-22 16:17 |只看该作者
回复 3# hyt123321c


    id对应字符串就是一对多的关系是伐,
一个字符串只能对应一个id,一个id可以对应多个字符串
如果一个字符串对应多个的id就不行了

论坛徽章:
0
6 [报告]
发表于 2012-08-22 16:33 |只看该作者
回复 4# personball
神奇!谢谢大侠!我在研究一下,就是这个结果!


   

论坛徽章:
0
7 [报告]
发表于 2012-08-27 10:12 |只看该作者
回复 5# personball 01.personball@vostro:~$awk \'NR==FNR{a[$2]=$1} NR>FNR{if($2 in a)print $0 >>a[$2]\".txt\" }\' id.txt log 在问下, >>a[$2]\".txt\" 这个输出,怎么才能给个路径? 比如规定输出到具体的目录下,awk \'NR==FNR{a[$2]=$1} NR>FNR{if($2 in a)print $0 >>/home/sysadmin/a[$2]\".txt\" }\' id.txt log 为什么这样不行。。?


   

论坛徽章:
0
8 [报告]
发表于 2012-08-27 10:34 |只看该作者
本帖最后由 personball 于 2012-08-27 10:35 编辑

回复 7# hyt123321c


    /home/sysadmin/ 这部分加上引号试试

论坛徽章:
0
9 [报告]
发表于 2012-08-27 16:32 |只看该作者
回复 8# personball

果然好用了。。谢谢大侠

   

论坛徽章:
0
10 [报告]
发表于 2012-08-27 17:56 |只看该作者
回复 8# personball


    awk 'NR==FNR{a[$2]=$1} NR>FNR{if($2 in a)print $0 >>"/home/sysadmin/"a[$2]".log"  还有一个问题。。
怎么才能给文件加上一个目录。。比如。。id1.txt  放到 /home/sysadmin/id1/目录下,变成/home/sysadmin/id1/id1.txt  。我能想到的办法是,先生成id1,id2,id3...的文件,然后在制作列表,在建立目录,在把这些文件放回去,这样是不是太傻了。。?awk有这种功能吗?直接建立目录a[$2],然后把文件放进去。。能吗大侠?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP