使用 grep 搜索目录中的文件,如何使用 list.txt(或 csv)获取每个单词的出现次数?

Using grep, to search the files in the directories, how can I get the occurrence count of each word using a list.txt(or csv)?

在 list.txt 我有:

Lucas
Viny
Froid

在当前目录中,我有很多包含名称的 csv 文件。

我需要知道我的列表中的每个单词在这些 csv 文件中出现了多少次。

我试过了:

grep -riohf list.txt . | wc -lw

但它 return 才算数。我需要知道每个计数指的是哪个词。

我只需要这样的东西:

Lucas 353453
Viny 9234
Froid 934586

在循环中使用 grepwc,您可以计算单词的每次出现次数,而不仅仅是行数。

while read -r line; do
    count=$(grep -o "$line" *.csv | wc -l)
    echo "$line $count"
done < list.txt

假设您有这些文件:

$ cat list.txt
Lucas
Viny
Froid

$ cat 1.csv
Lucas,Viny,Bob
Froid

$ cat 2.csv
Lucas,Viny,Froid
Lucas,Froid

您可以使用以下 awk 来计算与列表匹配的字段:

awk -F ',' 'FNR==NR{cnt[]; next}
{for (i=1; i<=NF; i++) if ($i in cnt) cnt[$i]++}
END{for (e in cnt) print e, cnt[e]}' list.txt {1..2}.csv
Viny 2
Lucas 3
Froid 3

另一种方法是使用管道来计算 uniq 字段:

cat {1..2}.csv | tr , "\n" | sort | uniq -c
   1 Bob
   3 Froid
   3 Lucas
   2 Viny

然后 grep 即:

cat {1..2}.csv | tr , "\n" | grep -Fxf list.txt | sort | uniq -c
   3 Froid
   3 Lucas
   2 Viny