注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Computer Science

I Pressed My Words Here. Will You Read ?

 
 
 

日志

 
 

记一次对大文件转码的经历  

2013-11-28 14:08:11|  分类: Tips |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
其实,自从将VIM的转码配置好后,常见的编码的文件,我都可以很正自如的编辑了。
但是,今天遇见了个大文件。是带中文的有38,000,000行的4.9GB的日志文件……
虽然VIM可以打开,但是速度比较慢(还好我有8G内存)。
在网上看到有比较节省内存的阅读方式,比如用sed这样的流读写(在寒冷的冬季给CPU升升温)。
sed -n '38040000p' file.log
但是,在我的终端中文显示为乱码。于是使用:
file file.log
得到:
file.log: ISO-8859 text, with very long lines
这时我尝试使用iconv对文件进行转码。在执行了iconv -l后,看到ISO-8859有很多种:
 ISO_8859-1, ISO_8859-1:1987,
  ISO_8859-2, ISO_8859-2:1987, ISO_8859-3, ISO_8859-3:1988, ISO_8859-4,
  ISO_8859-4:1988, ISO_8859-5, ISO_8859-5:1988, ISO_8859-6, ISO_8859-6:1987,
  ISO_8859-7, ISO_8859-7:1987, ISO_8859-7:2003, ISO_8859-8, ISO_8859-8:1988,
  ISO_8859-9, ISO_8859-9:1989, ISO_8859-9E, ISO_8859-10, ISO_8859-10:1992,
  ISO_8859-14, ISO_8859-14:1998, ISO_8859-15, ISO_8859-15:1998, ISO_8859-16,
  ISO_8859-16:2001
而大致依次尝试使用后都没有输出正确。
于是我尝试用VIM打开文件,并通过:set fileencoding查看,得到结果为gb18030。
这时,我使用gb18030对其转码
iconv --from-code=gb18030 --to-code=UTF-8 file.log -o file.utf-8.log
转码后终端输出结果正常。文件大小从4.9GB变为5.1GB。原文件就不在这里上传了记一次对大文件转码的经历 - computerScience - Computer Science


---------------------------------
时隔过日,在网上碰到这样一张秘籍:http://sed.sourceforge.net/sed1line_zh-CN.html
其中提到,sed '38040000q;d',据说这种写法比上文中提到的,在处理大文件时更有效率。
  评论这张
 
阅读(7)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017