免费注册 查看新帖 |

Chinaunix

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

[文本处理] shell 文件过滤问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-04 18:14 |只看该作者 |倒序浏览
本帖最后由 tianer 于 2013-12-04 18:17 编辑

请教一个问题

有一个log.txt文件

查找有 tradelog  字段的,往上看2、3行,会有一个类似这样的语句SET INSERT_ID=5/*!*/;
把这句用 # 号注释掉

有 auction 的, 直接用#注释后,然后把语句复制出来,按从上到下的顺序存在文件里 1.txt  


#131203 16:58:16 server id 1  end_log_pos 15367471      Intvar
SET INSERT_ID=263/*!*/;
# at 15367471
#131203 16:58:16 server id 1  end_log_pos 15367803      Query   thread_id=6585  exec_time=0     error_code=0
SET TIMESTAMP=1386107896/*!*/;
insert into tradelog (guid,sellguid,in_datetime,pricetype,price,goodid,goodnum)values( NAME_CONST('iguid',41909), NAME_CONST('isellguid',5907),now(), NAME_CONST('ipr
icetype',0), NAME_CONST('iprice',10000), NAME_CONST('igoodid',1022), NAME_CONST('igoodnum',1))  
/*!*/;
# at 15367803
#131203 16:58:16 server id 1  end_log_pos 15367830      Xid = 245014580
COMMIT/*!*/;
# at 15367830
#131203 16:58:16 server id 1  end_log_pos 15367900      Query   thread_id=6585  exec_time=0     error_code=0
SET TIMESTAMP=1386107896/*!*/;
BEGIN
/*!*/;
# at 15367900
#131203 16:58:16 server id 1  end_log_pos 15368021      Query   thread_id=6585  exec_time=0     error_code=0
SET TIMESTAMP=1386107896/*!*/;
delete from auction where guid= NAME_CONST('iguid',5907)
/*!*/;  
# at 15368021
#131203 16:58:16 server id 1  end_log_pos 15368048      Xid = 245014582

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
2 [报告]
发表于 2013-12-04 18:24 |只看该作者
回复 1# tianer


   “ 查找有 tradelog  字段的,往上看2、3行,会有一个类似这样的语句SET INSERT_ID=5/*!*/;
把这句用 # 号注释掉”

话说,这个行数不固定么? 可能2行?可能3行? 可能N行?

论坛徽章:
0
3 [报告]
发表于 2013-12-04 18:29 |只看该作者
回复 2# 关阴月飞


    是的不固定
这个是mysql的日志文件

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
4 [报告]
发表于 2013-12-04 18:36 |只看该作者
回复 1# tianer

注释这两句这样好像可以,但要中间再写入另一个文件,
新手表示不会了。
  1. awk '/SET INSERT_ID=/,/tradelog/{if(i++==0)$0="#"$0} /auction/{$0="#"$0}NF+=0' i
复制代码
  1. #131203 16:58:16 server id 1 end_log_pos 15367471 Intvar
  2. #SET INSERT_ID=263/*!*/;
  3. # at 15367471
  4. #131203 16:58:16 server id 1 end_log_pos 15367803 Query thread_id=6585 exec_time=0 error_code=0
  5. SET TIMESTAMP=1386107896/*!*/;
  6. insert into tradelog (guid,sellguid,in_datetime,pricetype,price,goodid,goodnum)values( NAME_CONST('iguid',41909), NAME_CONST('isellguid',5907),now(), NAME_CONST('ipr
  7. icetype',0), NAME_CONST('iprice',10000), NAME_CONST('igoodid',1022), NAME_CONST('igoodnum',1))
  8. /*!*/;
  9. # at 15367803
  10. #131203 16:58:16 server id 1 end_log_pos 15367830 Xid = 245014580
  11. COMMIT/*!*/;
  12. # at 15367830
  13. #131203 16:58:16 server id 1 end_log_pos 15367900 Query thread_id=6585 exec_time=0 error_code=0
  14. SET TIMESTAMP=1386107896/*!*/;
  15. BEGIN
  16. /*!*/;
  17. # at 15367900
  18. #131203 16:58:16 server id 1 end_log_pos 15368021 Query thread_id=6585 exec_time=0 error_code=0
  19. SET TIMESTAMP=1386107896/*!*/;
  20. #delete from auction where guid= NAME_CONST('iguid',5907)
  21. /*!*/;
  22. # at 15368021
  23. #131203 16:58:16 server id 1 end_log_pos 15368048 Xid = 245014582
复制代码

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
5 [报告]
发表于 2013-12-04 18:40 |只看该作者
下班了,明天来学习大家的代码。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
6 [报告]
发表于 2013-12-04 18:41 |只看该作者
回复 3# tianer


    1. tradelog 这个出现的次数固定不? 是和“SET INSERT_ID” 配对出现不?
    2. 如果不是配对出现,怎么破?

论坛徽章:
0
7 [报告]
发表于 2013-12-04 18:47 |只看该作者
回复 6# 关阴月飞


    出现次数不固定,
    是对应关系

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
8 [报告]
发表于 2013-12-04 19:13 |只看该作者
查找有 tradelog  字段的,往上看2、3行,会有一个类似这样的语句SET INSERT_ID=5/*!*/;
这个需求,就你给的文件,你希望注释哪一行?

论坛徽章:
0
9 [报告]
发表于 2013-12-04 19:16 |只看该作者
回复 8# yestreenstars


注释有 tradelog  字段的,之前最近的有SET INSERT_ID=xxxx的那一行

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
10 [报告]
发表于 2013-12-04 20:14 |只看该作者
回复 9# tianer
不好意思,忘记了 ~

看看是不是这样?
  1. awk '/^SET INSERT_ID=/{s="";k=1}/tradelog/{print "#"s;k=0}{s=s!=""?s"\n"$0:$0}/auction/{$0="#"$0;print > "1.txt"}!k' log.txt
复制代码
如果要直接修改log.txt的话就用这个:
  1. awk '/^SET INSERT_ID=/{s="";k=1}/tradelog/{print "#"s > FILENAME;k=0}{s=s!=""?s"\n"$0:$0}/auction/{$0="#"$0;print > "1.txt"}!k{print > FILENAME}' log.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP