使用 Bash 从域名列表中筛选 URL 列表



我有一个文章列表,并希望过滤该列表,以便新的文章列表仅包含来自一定数量域的文章。

现在,我有一个文章列表(~500)和一个域列表(~3,000)。

如何从不在域列表中的文章列表中删除文章?

两者都是文本文件,如何在 Bash 上执行此操作?

我有一种感觉,你必须拿文章列表,获取他们的域名,把这两件事放在一个数组中,然后将数组中的域名与列表中的域名进行比较,如果它们匹配,则保留它们。如果没有,请删除该项目并转到下一个项目。

这是我到目前为止所拥有的:

readarray a < ./articles
#I know "${b[@]}" is incorrect but idk how to write what I'm trying to do.
awk -F/ '{print $3}' "${a[@]}" > "${b[@]}" 
echo "${b[@]}"
# I'm lost after this

以下是输入:

文章.txt:

http://www.cbsnews.com/videos/white-house-knows-options-are-limited-in-ukraine/&amp;ct=ga&amp;cd=CAIyAA&amp;usg=AFQjCNFeY2uVQrvvDAMHeT-0nK2ZLNH7-g
http://www.huffingtonpost.com/2014/03/01/ukraine-russia-crimea_n_4879935.html&amp;ct=ga&amp;cd=CAIyAA&amp;usg=AFQjCNFH7GY3B6swce3qiK49xGt-CwDvMA
http://www.nybooks.com/blogs/nyrblog/2014/mar/01/ukraine-haze-propaganda/&amp;ct=ga&amp;cd=CAIyAA&amp;usg=AFQjCNFCcWadUJiAzaxg3OSO67gVIPVxww
http://ktla.com/2014/03/01/russian-upper-house-approves-use-of-military-force-in-ukraine-as-protests-continue/&amp;ct=ga&amp;cd=CAIyAA&amp;usg=AFQjCNGTkxvvAo1zSYLlA5ET54OcBsS-PA
http://deadlinelive.info/2014/03/01/you-quit-falling-for-the-war-on-terror-ukraine-coup-spawns-cold-war-redux-2014/&amp;ct=ga&amp;cd=CAIyAA&amp;usg=AFQjCNE3Fa_h7xoESBkcOzXVZCQnfBfxNA
http://www.ctvnews.ca/world/russian-parliament-oks-putin-s-request-to-use-military-force-in-ukraine-1.1709506&amp;ct=ga&amp;cd=CAIyAA&amp;usg=AFQjCNGnGeo4LWoLF5Qbq2UvL58ymlNFkA
http://www.vanguardngr.com/2014/03/un-security-council-hold-emergency-talks-ukraine/&amp;ct=ga&amp;cd=CAIyAA&amp;usg=AFQjCNFN7YRo037au4RfxSQoeVUCcL9hhA
http://www.reddit.com/r/AdviceAnimals/comments/1z82rt/russian_troops_cross_the_border_in_ukraine/&amp;ct=ga&amp;cd=CAIyAA&amp;usg=AFQjCNFHkmelnoRy2TCW-eYDpIt_t-N1iA
http://criticallegalthinking.com/2014/03/01/knot-politics-thoughts-ukraine-protest/&amp;ct=ga&amp;cd=CAIyAA&amp;usg=AFQjCNFLMuZzbuvzpLf7a9U8MtbhCE5lJQ
http://nypost.com/2014/03/01/russia-parliament-approves-military-action-in-ukraine/&amp;ct=ga&amp;cd=CAIyAA&amp;usg=AFQjCNFpdyelZDEMUk39LmfC1tTDcQ6_FA

域.txt:

cbsnews.com
huffingtonpost.com
例如,

如果您的文章列表位于文件articles中并且看起来像

... article1 ........ 1.domain.com .......
... article2 ........ 1.domain.com .......
... article3 ........ 2.domain.com .......
... article3 ........ 3.domain.com .......
... article4 ........ 4.domain.com .......

您的域列表也在文件domains中,看起来像

1.domain.com 
2.domain.com 
4.domain.com

(如果不是,希望您可以提取域并将它们放入上述文件中)然后

grep -f domains articles > my_wish_list

只会给你文件域中指定的文章

如果列表永远不会超过这些数字,那么一个简单的 grep 单行代码就可以了:

for mydomain in `cat domains.txt`;do cat articles.txt |grep $mydomain >> goodarticles.txt;done

最新更新