免费注册 查看新帖 |

Chinaunix

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

如何不需要更多的空间,去掉文件的首位注释行? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-02-18 13:59 |只看该作者

回复 10楼 dbcat 的帖子

谢谢朋友们!!

我再把问题详细说一下:
注释行是为了标记开始和结束的,所以只有头尾两行,文件一共有一亿行左右,不是定值。
现在问题的焦点是空间问题。希望在不要增加空间使用的情况下,用简洁的方式处理掉头
尾行。假如使用grep awk sed,都需要双倍的空间才能完成操作。

ps:文件是给informatic 读取,进行加载的,如果有办法让informatic忽略注释行也可以。

谢谢了!!

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
12 [报告]
发表于 2006-02-20 08:31 |只看该作者
试一下:创建一个命名管道,用grep,sed or awk处理源文件作为输入。然后用informatic加载这个命名管道。

论坛徽章:
0
13 [报告]
发表于 2006-02-20 08:58 |只看该作者
原帖由 r2007 于 2006-2-20 08:31 发表
试一下:创建一个命名管道,用grep,sed or awk处理源文件作为输入。然后用informatic加载这个命名管道。



能否举个例子,学习一下。

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
14 [报告]
发表于 2006-02-20 09:30 |只看该作者
  1. mkfifo pipe #or mknod pipe p
  2. sed '/^#/d' bigfile >pipe &
  3. informatic pipe #没用过这个程序,参数自行补充
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
15 [报告]
发表于 2006-02-20 17:36 |只看该作者
informatic我也没用过。如果它和其它unix程序表现一样,能够从管道接受输入文件,那就很简单了:
sed '/^#/!p' HugeFile | informatic other arguments
如果不能,但是能在命令行接受文件名作为参数,并且你的平台有bash可用,你可以用bash的进程替换:
informatic <(sed '/^#/!p' HugeFile) other arguments
如果informatic是一个图形程序,而且不能在命令行接受文件名作为参数,又或者你没有bash,那么用r2007的方法吧。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
16 [报告]
发表于 2006-02-20 17:37 |只看该作者
非常感谢 yuxh 的思路
  1. #!/usr/bin/perl
  2. $fn = shift;
  3. open R, "<$fn";
  4. open W, "+<$fn";
  5. while(<R>){
  6.     print W unless /^#/;
  7. }
  8. truncate( W, tell(W) );
复制代码


调用:
  1. perl foo.pl you-big-file
复制代码

[ 本帖最后由 flw 于 2006-2-21 09:40 编辑 ]

评分

参与人数 1可用积分 +2 收起 理由
waker + 2

查看全部评分

论坛徽章:
0
17 [报告]
发表于 2006-02-20 21:19 |只看该作者

回复 16楼 flw 的帖子

谢谢了!!
我试试命名管道吧,我想这个应该可以考虑,只要能维护好!

flw的想法也很棒,不过我有点怀疑速度,等我测试以后,回复大家,谢谢了!!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
18 [报告]
发表于 2006-02-21 09:39 |只看该作者
原帖由 teleh 于 2006-2-20 21:19 发表
谢谢了!!
我试试命名管道吧,我想这个应该可以考虑,只要能维护好!

flw的想法也很棒,不过我有点怀疑速度,等我测试以后,回复大家,谢谢了!!

呵呵,我在我的机器上测试过,
10G 的数据,需要将近 9 分钟。
我的配置:
P4 3G
1G 内存
SATA 硬盘,转速不详
Linux 2.6.10
Perl 5.8.5

[ 本帖最后由 flw 于 2006-2-21 09:42 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2006-02-21 15:21 |只看该作者
原帖由 r2007 于 2006-2-20 08:31 发表
试一下:创建一个命名管道,用grep,sed or awk处理源文件作为输入。然后用informatic加载这个命名管道。


这个命名管道和我们常用的管道有什么区别?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
20 [报告]
发表于 2006-02-21 15:41 |只看该作者
最重要的是这个管道有名字

另外不用的时候要显式删除
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP