0

我正在使用以下命令从文件中提取域名和完整的域扩展名。例如: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 100source.txt. 如果我没有指定,或者我指定了一个巨大的数字,就会出现问题。虽然,我之前可以使用 grep(而不是 egrep)写入文件,其数量与我现在正在尝试的类似,并且是成功的。我还在执行命令期间检查了最后修改的日期和时间,似乎目标文件中没有发生任何修改。可能是什么问题呢 ?

4

2 回答 2

1

正如我在您之前的问题中提到的,这可能不是问题egrep,但是您的文件太大并且在 egrep 完成之前sort不会输出任何内容(到)。uniq我建议您使用split命令将文件拆分为可管理的夹头。像这样的东西:

split -l 10000000 source.txt split_source.

这会将source.txt文件拆分为 1000 万行块,称为,split_source.a等。您可以在每个文件上运行整个命令(并且可能将管道更改为在末尾追加:)。split_source.bsplit_source.c>> dest.txt

这里的问题是您可以跨多个文件获取重复项,因此最后您可能需要运行

sort dest.txt | uniq > dest_uniq.txt
于 2012-07-30T04:42:52.070 回答
0

您的问题缺少信息。

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

  1. 运行,egrep <params> | less这样您就可以看到在做什么,并从、或(我的赌注)中egreps消除任何问题。sortuniqsedsort

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

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

其次,改进你的脚本:

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

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

于 2012-07-30T02:26:05.697 回答