很长的线路导致问题

时间:2013-03-18 10:30:17

标签: awk

我的文件包含~80,000行有问题。它是一个23Gb的大文件。我已经设法使用以下命令来填充该大小的类似文件:

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

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

我想摆脱文件中的这一长行并继续进行,但事实证明这很困难。我只是简单地使用以下工作

awk 'length < 1000000000' file1 > file2

然而,这也是在3.5小时后仍在运行。是否存在一种快速浏览文件的方法,以及一行中字符数的计数超过例如10亿,它停止计数并移动到下一行?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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等于这些数字中的任何一个,则跳过该行。