免费注册 查看新帖 |

Chinaunix

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

如何快速替换/修改大文件其中的一行? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-07-14 18:13 |只看该作者
回复 10# donglongchao


    mmap 不写,不会读到内存的

论坛徽章:
0
12 [报告]
发表于 2010-07-14 18:17 |只看该作者
回复 10# donglongchao


    建议你man一下mmap, 比如你要修改的地方在文件100个字节偏移处,要修改10个字节,那么你就从100个字节偏移处mmap,长度10个字节.

论坛徽章:
0
13 [报告]
发表于 2010-07-14 18:20 |只看该作者
回复 12# samlumengjun
不止是修改,如果希望在某个地方插入数据,即改变文件长度,是不是还是不行?

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
14 [报告]
发表于 2010-07-14 18:21 |只看该作者
从头开始读取、匹配、替换。一个while循环

论坛徽章:
0
15 [报告]
发表于 2010-07-14 19:50 |只看该作者
那就用awk,一次读一行

论坛徽章:
0
16 [报告]
发表于 2010-07-15 11:07 |只看该作者
回复 13# donglongchao


    你的这种需求好象除了全部mmap进来外,还要增加一点冗余空间才能满足.不过这样也是最方便最高效的实现方法了,如果内存不够的话,那么可能只有把文件分成几块处理了.

论坛徽章:
0
17 [报告]
发表于 2010-07-15 11:10 |只看该作者
RT。
如果文件较大,几百兆或者上G,但是只需要替换/修改其中的某一行,如何才能速度更快?能不能不全读出 ...
donglongchao 发表于 2010-07-14 17:47



    读取一行,检查,然后写入到另一个文件中,相当于复制一份文件,行不?

论坛徽章:
0
18 [报告]
发表于 2010-07-15 11:21 |只看该作者
读取一行,检查,然后写入到另一个文件中,相当于复制一份文件,行不?
rain_fish 发表于 2010-07-15 11:10

这种方法应该和全部读出再全部写入差不多吧。
根本上说可能是现有文件系统不直接支持这种操作吧。需要人工hack。。。

论坛徽章:
0
19 [报告]
发表于 2010-07-15 11:23 |只看该作者
这种方法应该和全部读出再全部写入差不多吧。
根本上说可能是现有文件系统不直接支持这种操作吧。需要人 ...
donglongchao 发表于 2010-07-15 11:21



    有点不一样,一行一行的读就不需要把几G的文件全部放到内存。。

论坛徽章:
0
20 [报告]
发表于 2010-07-15 11:27 |只看该作者
有点不一样,一行一行的读就不需要把几G的文件全部放到内存。。
rain_fish 发表于 2010-07-15 11:23

但是你至少要保证复制后的文件要全部包含原文件的内容, 还是需要全部读出 。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP