免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: dps迷失_
打印 上一主题 下一主题

[文本处理] 读取新增内容,追加到新文件 [复制链接]

论坛徽章:
4
技术图书徽章
日期:2013-09-23 10:22:37狮子座
日期:2013-10-15 23:31:54卯兔
日期:2013-11-11 17:33:15金牛座
日期:2013-11-15 17:25:28
11 [报告]
发表于 2013-11-08 16:00 |只看该作者
回复 9# 关阴月飞

如果文件有200M,每次运行都要保存一个200M的临时文件
临时文件里保存原文件的行数比较好,每次就从上次运行行数开始打印文件内容到另一个文件

我没有考虑第一次运行时file.counter不存在的情形

  1. #从上次运行的行数开始打印文件内容到file.new
  2. awk 'NR>'`cat file.counter`'' file > file.new

  3. # 第一行awk运行后可能有新的内容加进file, 我们不用wc -l < file来计算文件的行数
  4. # 把上次的counter值加上file.new的行数存进file.counter
  5. echo $((`cat file.counter` + `wc -l < file.new`)) > file.counter
复制代码

论坛徽章:
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
12 [报告]
发表于 2013-11-08 16:22 |只看该作者
本帖最后由 关阴月飞 于 2013-11-08 16:23 编辑

回复 11# nbrr


    如果针对的是像日志类的纯增长的文件记录行数是可行的,但是如果文件是有修改操作的,例如:删除一行,再添加一行, 只靠文件行数来记录变化是达不到效果的....

论坛徽章:
1
辰龙
日期:2014-12-17 15:54:35
13 [报告]
发表于 2013-11-08 16:40 |只看该作者
我发帖的主要目的是监控某个目录下的某些文件的修改记录,经过各位大牛的指点想出一个脚本应该能达到目的吧,待测……
有没有更为快捷方便的方法达到目的呢?
还得请大牛们帮忙完成这个小小的脚本
  1. #!/bash/bin
  2. find /etc/ -type f -mtime 0 | grep conf
  3. 定义name变量为列出的结果
  4. 当$name为列出的第一个结果时
  5. \cp $name $name.bak
  6. diff $name $name.bak > /bak/conf/$name-$DATA.txt
  7. find /bak/conf/ -type f -mtime +7 -exec rm -f {} \;
  8. 当$name为列出的第二个结果时
  9. ……循环
  10. 工作完如何停止……
复制代码

论坛徽章:
1
辰龙
日期:2014-12-17 15:54:35
14 [报告]
发表于 2013-11-08 17:01 |只看该作者
回复 12# 关阴月飞
帮忙完善下

   

论坛徽章:
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
15 [报告]
发表于 2013-11-08 17:19 |只看该作者
本帖最后由 关阴月飞 于 2013-11-08 17:22 编辑

回复 14# dps迷失_

目测
find /bak/conf/ -type f -mtime +7 -exec rm -f {} \;
这句不用放在循环里,循环完成后,再执行一次就行了吧:
  1. #!/bin/bash
  2. while read name
  3. do
  4. cp $name ${name}.bak
  5. diff $name ${name}.bak > /bak/conf/${name}-${DATA}.txt
  6. done < <(find /etc/ -type f -mtime 0 | grep conf)

  7. find /bak/conf/ -type f -mtime +7 -exec rm -f {} \;
复制代码

论坛徽章:
1
辰龙
日期:2014-12-17 15:54:35
16 [报告]
发表于 2013-11-08 17:35 |只看该作者
回复 15# 关阴月飞
name变量怎么定义呢?怎么样让name从第一个循环到最后一个?< <(find /etc/ -type f -mtime 0 | grep conf)
< <()这个是将find的结果导入到哪哪吗?< <中间不是没有空格的吗?
   

论坛徽章:
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
17 [报告]
发表于 2013-11-08 17:42 |只看该作者
回复 16# dps迷失_


“   回复 15# 关阴月飞
name变量怎么定义呢?怎么样让name从第一个循环到最后一个?< <(find /etc/ -type f -mtime 0 | grep conf)
< <()这个是将find的结果导入到哪哪吗?< <中间不是没有空格的吗?”
   


while read  name  #这里定义了name变量
do

.. #让name从第一个循环到最后一个
..
..
done < <(find /etc/ -type f -mtime 0 | grep conf)  #这里将find /etc/ -type f -mtime 0 | grep conf  命令的输出传给while 循环。 注意: < <(..)  两个< <中间是有空格的

论坛徽章:
1
辰龙
日期:2014-12-17 15:54:35
18 [报告]
发表于 2013-11-08 17:54 |只看该作者
回复 17# 关阴月飞

又学了一招,有没有更方便快捷达到同样目的的方法呢?
   

论坛徽章:
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
19 [报告]
发表于 2013-11-08 18:22 |只看该作者
回复 18# dps迷失_


    用于循环的还有 for  until  之类的,大同小异,你可以去看看,自己喜欢哪个就用哪个......

论坛徽章:
4
技术图书徽章
日期:2013-09-23 10:22:37狮子座
日期:2013-10-15 23:31:54卯兔
日期:2013-11-11 17:33:15金牛座
日期:2013-11-15 17:25:28
20 [报告]
发表于 2013-11-08 21:36 |只看该作者
关阴月飞 发表于 2013-11-08 16:22
回复 11# nbrr


果然是目测帝,楼主的贴子标题写着读取新增内容,追加到新文件
你都能目测到文件不只是增加新内容

我的思路是从nagios日志监控脚本check_log来的,的确不适用于楼主的需求
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP