我在搜索引擎优化工作,有时我必须管理域名列表,以便我们的广告系列中的某些操作被考虑。在我的iMac上,我有2个列表,一个用于考虑 - unfiltered.txt
- 另一个列出了我已经分析过的域名used.txt
。提供考虑的那个,新的(unfiltered.txt
),如下所示:
site1.com
site2.com
domain3.net
british.co.uk
england.org.uk
auckland.co.nz
... etc
需要用作过滤器的域名列表(used.txt
) - 看起来像这样。
site4.org
site5.me
site6.co.nz
gland.org.uk
kland.co.nz
site7.de
site8.it
... etc
有没有办法使用我的OS X终端从unfiltered.txt中删除used.txt中找到的所有行?找到了一个部分解决问题的软件解决方案,除了来自used.txt的单词之外,还消除了包含这些较小单词的单词。这意味着我可以获得更广泛的过滤器并消除我仍然需要的域名。
例如,如果我的unfiltered.txt包含名为fogland.org.uk
的域,则如果在我的used.txt文件中有一个名为gland.org.uk
的域,则会自动删除该域。
文件非常大(接近10万行)。我有相当不错的配置,配备SSD,i7 7代,16GB内存,但不太可能只让它运行几个小时。
...希望它有意义。
TIA
答案 0 :(得分:1)
您可以使用awk
执行此操作。您将两个文件都传递给awk
。解析第一个文件时,所有文件中的当前记录号与当前文件中的记录号相同,您可以记下您看到的每个域。然后,在解析第二个文件时,您只打印与您在第一个文件中没有看到的记录相对应的记录:
awk 'FNR==NR{seen[$0]++;next} !seen[$0]' used.txt unfiltered.txt
输入数据的示例输出
site1.com
site2.com
domain3.net
british.co.uk
england.org.uk
auckland.co.nz
awk
包含在内并作为macOS的一部分提供 - 无需安装任何内容。
答案 1 :(得分:0)
您可以使用comm
。我没有在这里检查mac,但我希望它将默认安装。请注意,必须对两个文件进行排序。然后尝试:
comm -2 -3 unfiltered.txt used.txt
查看手册页以获取更多详细信息。
答案 2 :(得分:0)
我一直使用
grep -v -F -f expunge.txt filewith.txt > filewithout.txt
这样做。当“expunge.txt”太大时,您可以分阶段完成,将其切换为可管理的块并逐个过滤:
cp filewith.txt original.txt
and loop as required:
grep -v -F -f chunkNNN.txt filewith.txt > filewithout.txt
mv filewithout.txt filewith.txt
您甚至可以在管道中执行此操作:
grep -v -F -f chunk01.txt original.txt |\
grep -v -F -f chunk02.txt original.txt |\
grep -v -F -f chunk03.txt original.txt \
> purged.txt
答案 3 :(得分:0)
您可以使用comm
并处理替换以在一行中执行所有操作:
comm -23 <(sort used.txt) <(sort unfiltered.txt) > used_new.txt
P.S。在运行OSX 10.11.6(El Capitan)的Mac上测试