egrep没有写入文件

时间:2012-07-30 02:01:03

标签: linux

我正在使用以下命令来提取域名&来自文件的完整域扩展。例如:www.abc.yahoo.com,www.efg.yahoo.com.us。

[a-z0-9\-]+\.com(\.[a-z]{2})?' source.txt | sort | uniq | sed -e 's/www.//' 
> dest.txt

当我在-m 100之后指定小的最大参数source.txt时,命令正确写入。问题,如果我没有指定,或者我指定了一个庞大的数字。虽然,我之前可以使用grep(而不是egrep)写入文件,其中包含类似于我现在正在尝试的大量数字,但这是成功的。我还检查执行命令期间的最后修改日期和时间,似乎目标文件中没有发生修改。可能是什么问题?

2 个答案:

答案 0 :(得分:1)

正如我在earlier question中提到的,egrep可能不是问题,但是你的文件太大而且sort不会输出任何内容({{1}直到egrep完成。我建议您使用split命令将文件拆分为可管理的卡盘。像这样:

uniq

这会将split -l 10000000 source.txt split_source. 文件拆分为1000万行名为source.txtsplit_source.asplit_source.b等的行。然后您可以在每个行上运行整个命令文件(并且可能更改管道以在末尾附加:split_source.c)。

这里的问题是你可以在多个文件中获得重复,所以最后你可能需要运行

>> dest.txt

答案 1 :(得分:0)

您的问题缺少信息。

除此之外,还有一些想法。首先,调试并隔离您的问题:

  1. 运行egrep <params> | less,以便了解egreps正在做什么,并排除来自sortuniqsed的任何问题(我的投注sort)。

  2. 您的投入有多大?任何机会sort都会因过多的投入而死亡?

  3. 需要查看完整命令才能发表进一步的评论。

  4. 其次,改进你的脚本:

    1. 您可能希望在sort | uniq之后sed,否则您最终可能会在结果集中出现重复项,以及未排序的结果集。也许这就是你想要的。

    2. 如果适合建立行开头(^)和行尾($)锚点,请考虑使用“^ ... $”包装正则表达式。否则你将匹配一行中间的部分。