网站上多个关键字的计数

网站上多个关键字的计数

我目前有以下命令

wget -O - -q http_url_goes_here |
    grep -Eci '(cart|shop|buy|order|store|shipping|products|price)'

它为我提供了网站上以下每个关键字的所有出现次数(cart|shop|buy|order|store|shipping|products|price)

我遇到的问题是,如果某些单词出现多次,计数会高达 200。我想获得 0 到 8 之间的计数,这表明在网站上找到了多少个关键字。正如每个关键字的计数最多应增加 1 一样。

我感谢您的帮助。

答案1

使用 GNU grep:

wget -O - -q http_url_goes_here |
    grep -wEoi 'cart|shop|buy|order|store|shipping|products|price' | 
        sort -fu | wc -l

我将其添加-w到您的grep命令中,以便您不会将主教等算作商店的命中。

答案2

POSIXly:

tr -cs '[:alnum:]_' '[\n*]' | grep -xiF 'cart
shop
buy
order
store
shipping
products
price' | sort -fu | wc -l

您还可以在文件中包含单词列表并使用:

tr -cs '[:alnum:]_' '[\n*]' | grep -xiFf word.list | sort -fu | wc -l

您可以通过执行以下操作来提高效率:

tr -cs '[:alnum:]_' '[\n*]' | awk -v o=0 '
   {$0=tolower($0)}
   NR==FNR{a[$0];n++;next}
   {
     for (i in a) if ($0 == i) {
       if (++o == n) exit
       delete a[i]
     }
   }
   END {print o}' word.list -

答案3

沃尔克·西格尔的回答非常有用。但是,如果您希望输出是0和之间的数字,8您应该添加一个grep来计算行数。

$ wget -O - -q ix.de | grep -Eoi '(cart|shop|buy|order|store|shipping|products|price)' | sort -i | uniq -i | grep -c ''
2

-c请注意,现在的标志uniq不是必需的。

相关内容