2013-03-18 50 views
1

我有一个包含~80,000行的文件有问题。这是一个23Gb的大文件。我设法该尺寸的使用下面的命令块了类似的文件:很长的行导致问题

awk '{fn = NR % 24; print > ("file1_" fn)}' file1 

然而,在这一个问题的文件该命令摊位。问题文件确实有一个非常大的30亿字符(其他文件中最长的行少于10亿),我猜这是问题所在。

我想摆脱文件中的这一长长的行,然后继续,但这证明是困难的。我虽然简单地使用以下将工作

awk 'length < 1000000000' file1 > file2 

但是,这也仍然运行后3.5小时。是否有一种快速浏览文件的方法,当一行中的字符数超过了10亿,它会停止计数并移动到下一行?

+0

我对这个问题一无所知('我认为使用c作为答案),但它听起来很有趣。 – 2013-03-18 11:03:52

+0

您使用的是什么版本的awk('awk --version')?也许GNU awk(gawk)的更新版本就是你所需要的。 – 2013-03-18 13:08:42

+0

这是GNU Awk 3.1.5 – user1308144 2013-03-18 13:12:02

回答

1

也许你可以尝试将两个awk行组合成一个命令,它可能会更快。因为它只处理你的怪物文件一次。但是你必须测试。

awk '{fn = NR % 24; if(length< 1000000000) print > ("file1_" fn)}' file1 
0

尝试使用SED删除超过一定数目的字符更长的线

# delete lines longer than 65 characters 
sed '/^.\{65\}/d' file 

您也可以使用2步法:

# use sed to output the line numbers containing lines 
# longer than a certain number of characters 
sed -n '/^.\{65\}/=' file 

,然后使用该列表在awk中构建一个跳过列表,即如果NR等于这些数字中的任何一个,则跳过该行。