2012-07-30 49 views
0

我正在使用以下命令以从文件中提取域名&完整域扩展名。例如:www.abc.yahoo.com,www.efg.yahoo.com.us。egrep不写入文件

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

的命令写正确,当我source.txt后指定较小的最大参数-m 100。这个问题如果我没有指定,或者我指定了一个巨大的数字。尽管如此,我可以用grep(而不是egrep)写入文件,其数据类似于我现在正在尝试的那样,而且很成功。我还检查命令执行过程中最后修改的日期和时间,看起来目标文件中没有修改。可能是什么问题呢 ?

+0

大多数版本的'在Linux上sort'有'-u'作为参数做'uniq'步骤。试试吧...... – JimR 2012-07-30 04:51:56

回答

1

正如我在你的earlier question提到的,它可能不是与egrep的问题,而是你的文件太大,并且sort不会输出任何东西(到uniq),直到egrep的完成。我建议你使用split命令将文件分割成可管理的卡盘。事情是这样的:

split -l 10000000 source.txt split_source. 

这将source.txt文件分成10个百万行的块称为split_source.asplit_source.bsplit_source.c等,并可以运行这些文件中的每一个完整的命令(也许改变管在末尾附加:>> dest.txt)。

这里的问题是,你可以得到多个文件副本,所以在最后,你可能需要运行

sort dest.txt | uniq > dest_uniq.txt 
+0

这个文件太大了。我等了很长时间,并写下了它。我怀疑是因为最后修改日期和时间显示我没有进展或修改正在发生。 – 2012-07-30 16:18:29

+0

@JuryA是的,这是因为'sort'在从egrep获取所有数据(为了正确排序)之前不会输出任何内容,因此在egrep完成之前根本没有任何事情发生。 – 2012-07-30 16:19:38

0

您的问题缺少信息。

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

  1. 运行egrep <params> | less所以你可以看到什么egreps做,并从sortuniq,或sed消除任何问题(上sort我的投注)。

  2. 您的输入有多大?任何机会sort死于太多的输入?

  3. 需要看完整的命令才能做出进一步的评论。

二,提高你的脚本:

  1. 你可能想sort | uniqsed,否则你可能会在你的结果集中的重复和无序结果集结束。也许这就是你想要的。

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