1

我对包含约 80,000 行的文件有疑问。这是一个23Gb的大文件。我已经设法使用以下命令将类似大小的文件分块:

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

但是,此命令在这个问题文件上停止。问题文件确实有一个非常大的 30 亿字符行(其他文件中最长的行少于 10 亿),我猜这就是问题所在。

我想从文件中删除这条长线并继续,但事实证明这很困难。我虽然简单地使用以下内容就可以了

awk 'length < 1000000000' file1 > file2

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

4

2 回答 2

1

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

awk '{fn = NR % 24;  if(length< 1000000000) print > ("file1_" fn)}' file1
于 2013-03-18T10:41:32.283 回答
0

尝试使用 sed 删除超过一定字符数的行

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

您还可以使用两步法:

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

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

于 2013-03-18T12:33:30.593 回答