免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7938 | 回复: 20

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

论坛徽章:
0
发表于 2006-02-16 23:52 |显示全部楼层
注释行有#开头。

因为文件有10G,想直接对文件操作,但一时没有简洁的方式,大家有什么好主意吗?

AIX  ksh下

论坛徽章:
0
发表于 2006-02-16 23:58 |显示全部楼层
sed 高版本有-i选项的话 应该可以吧? 还得请高手门出招。。。

论坛徽章:
0
发表于 2006-02-17 09:01 |显示全部楼层
原帖由 teleh 于 2006-2-16 23:52 发表
注释行有#开头。

因为文件有10G,想直接对文件操作,但一时没有简洁的方式,大家有什么好主意吗?

AIX  ksh下


处理这么大的数据没试过喔,如果只是注释#开头的还是比较容易,但大容量的处理....

论坛徽章:
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
发表于 2006-02-17 10:56 |显示全部楼层
不要做任何处理,直到你需要处理的时候。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2006-02-17 11:43 |显示全部楼层
原帖由 r2007 于 2006-2-17 10:56 发表
不要做任何处理,直到你需要处理的时候。

说得太好了!这样的大文件不论用sed还是perl,加-i选项与否,都很慢的。所以最好还是"let the sleeping dog sleep"。当你需要处理时简单地过滤掉不用的行就行了。例如:
sed '/^#/!p' | ....
awk '!/^#/' | ....

论坛徽章:
1
寅虎
日期:2015-01-23 02:35:47
发表于 2006-02-17 11:51 |显示全部楼层
ed试试

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2006-02-17 12:07 |显示全部楼层
原帖由 cuci 于 2006-2-17 11:51 发表
ed试试

ed不过是一个简单的行编辑器,我感觉应该无法处理那么大的数据量吧

论坛徽章:
0
发表于 2006-02-17 17:55 |显示全部楼层
我的一个客户问过类似的一个问题,我的建议是,分成若干小文件,然后再处理。


awk '{ print >"user_"int(NR/200000)".txt"}'  user.txt         

200000 is the number of lines in each file.user.txt is the original file.
And all the splited files should be looks like :

user_1.txt
user_2.txt


user_n.txt

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2006-02-17 17:57 |显示全部楼层
原帖由 zhangr 于 2006-2-17 17:55 发表
我的一个客户问过类似的一个问题,我的建议是,分成若干小文件,然后再处理。


awk '{ print >"user_"int(NR/200000)".txt"}'  user.txt         

200000 is the number of lines in each ...

可以考虑专门切割工具可以考虑用split/csplit

论坛徽章:
0
发表于 2006-02-18 02:40 |显示全部楼层
原帖由 teleh 于 2006-2-16 23:52 发表
注释行有#开头。

因为文件有10G,想直接对文件操作,但一时没有简洁的方式,大家有什么好主意吗?

AIX  ksh下



用C语言会快些,用SED AWK 反而会很慢:


  1. #include "stdio.h"
  2. void   read_file(FILE *fp)
  3. {
  4.   char line[BUFSIZ];
  5.   while(fgets(line,BUFSIZ,fp)) line[0]!='#'  && printf(line);
  6.   fclose(fp);
  7. }

  8. main()
  9. {
  10. read_file(stdin);
  11. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP