免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7169 | 回复: 16
打印 上一主题 下一主题

[文本处理] awk如何能处理1.5G和16G的大文件,读取时出现内存错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-15 14:24 |只看该作者 |倒序浏览
我手头有两个文本文件,一个1.5G左右,一个16G左右,
1.5G文件的例子:
  1. 1234235963745
  2. asdfasfsadfasds
  3. 1111111111111
复制代码
16G文件的例子如下:
  1. 1234235963745,1234
  2. asdfasfsadfasds,4124
  3. 1111111111111,m123
  4. 1234235233745,1111
  5. asdfas33dfasds,111231
  6. 1111232111111,1231
复制代码
我是在16G文件中,找出其第一列与1.5G文件中相同的行,然后输出。
我的思路是将1.5G的文件读入awk中,然后再读第二个16G的文件,匹配到后就输出,可是现在发现awk在内容占用到2G多的时候就因为内存的原因报错了,当时已经读入了2亿6千万多行的数据,可是1.5G的文件的总行数大概在5亿多行。
想请教一下大家看看谁知道对于这种大文件有什么办法处理吗?

PS:在将1.5G的文件分割成小文件的方法我已经试了,是可以的,就是想问还有没有更好的处理办法。
PPS:不只局限于shell,别的什么语言程序都可以,只要能处理就可以,谢谢大家了。~~

论坛徽章:
0
2 [报告]
发表于 2012-10-15 14:29 |只看该作者
本帖最后由 dahaoshanhe 于 2012-10-15 14:30 编辑

把文件分割成一些小的呢
或是找台大内存的机器

论坛徽章:
0
3 [报告]
发表于 2012-10-15 14:46 |只看该作者
回复 2# dahaoshanhe




分割的已经试过了,可以用。
内存的话,机器本身已经很大了,16G,就是awk自己用不了那么多。系统是32位的,不知道64位的会不会好点,但是手头没有64位的机器,也试不了。

论坛徽章:
0
4 [报告]
发表于 2012-10-15 14:47 |只看该作者
linux 32位的操作系统只支持最大文件2G
若需处理更大的文件,要安装64位的操作系统

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2012-10-15 15:24 |只看该作者
回复 1# x-dongzi

does it have issue as below command:

awk '{a[$0]=1}' 1.5G.txt

   

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
6 [报告]
发表于 2012-10-15 15:25 |只看该作者
  1. grep -Ff 1.5G 16G
复制代码
这样试试看吧

论坛徽章:
0
7 [报告]
发表于 2012-10-15 15:50 |只看该作者
回复 4# lcz88990200


等我找台64位的AIX机器试试看。

论坛徽章:
0
8 [报告]
发表于 2012-10-15 15:51 |只看该作者
回复 5# jason680


    不行的,总是内存用到2094912k之后awk就hang在那里了。

论坛徽章:
0
9 [报告]
发表于 2012-10-15 16:04 |只看该作者
每天我要用C程序处理一批文件分析提取数据,每个文件有2-6G,
在linux 32位下<2G都能正常处理,超过2G全都处理不了,
没办法,只好安装64位系统,C程序不作任何改动,重新编译一下就能处理任意大小文件。
我安装64位系统的主机内存2G。
听我的没错的。

论坛徽章:
0
10 [报告]
发表于 2012-10-15 16:07 |只看该作者
回复 9# lcz88990200


    谢谢,悲催了,木有64位的机器,等以后找找吧。不过现在倒是已经分割成小文件处理了。唉~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP