LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 798|回复: 5

Shell脚本编写求助,Help me.!

[复制链接]
发表于 2005-7-28 18:42:54 | 显示全部楼层 |阅读模式
我想实现文本筛选,假设文件内容有1000行,其中关键字是abc。
想实现:将所有abc前4行后18行的内容摘出来导入另一个文件当中。

请精通脚本的朋友给予帮助,现在非常着急用,先谢谢啊
发表于 2005-7-28 19:33:41 | 显示全部楼层
Post by myster
我想实现文本筛选,假设文件内容有1000行,其中关键字是abc。
想实现:将所有abc前4行后18行的内容摘出来导入另一个文件当中。

请精通脚本的朋友给予帮助,现在非常着急用,先谢谢啊



perl a.pl < your_data

  1. #! /usr/bin/perl

  2. @data = <STDIN>;

  3. for ($i = 0; $i <= $#data; ++$i) {
  4.         if ( index($data[$i] , "abc") >= 0) {
  5.                 #print "FOUND: $data[$i]";
  6.                 for ($j = ($i -4 > 0 ? $i-4 : 0);  
  7.                 $j <= ($i + 18 < $#data ? $i + 18 : $#data);
  8.                 ++$j) {
  9.                         #print $j, " ", $data[$j];
  10.                         print $data[$j];
  11.                 }
  12.                 #print "END\n";
  13.         }
  14. }

复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-28 19:59:36 | 显示全部楼层
未经调试,也是换了一种思路吧,请问如何输出结果至单独文件?
Perl脚本编程不是很熟。
经朋友相助,用cat file|grep -A18 -B4 "abc"实现比较简单快捷。
回复 支持 反对

使用道具 举报

发表于 2005-7-28 20:23:30 | 显示全部楼层
不错,grep的办法简明。

输出到文件? perl a.pl < input  >output
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-28 20:26:35 | 显示全部楼层
对于小型文件还可以,对于数据比较多的文件,比如几十M或几百M的文件,这样程序运行起来就很耗时。
有时间研究一下grep源码。
它的执行效率的确很快。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-3 23:40:19 | 显示全部楼层
现在假设我有一个文件中包括若干个随机生成的数字串,且不固定长度,但是位置固定.
我想统计有多少个,并且每个的数量有多少,看看有没有什么好的方法.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表