使用 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
在循环中使用 grep
和 wc
,您可以计算单词的每次出现次数,而不仅仅是行数。
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
在 list.txt 我有:
Lucas
Viny
Froid
在当前目录中,我有很多包含名称的 csv 文件。
我需要知道我的列表中的每个单词在这些 csv 文件中出现了多少次。
我试过了:
grep -riohf list.txt . | wc -lw
但它 return 才算数。我需要知道每个计数指的是哪个词。
我只需要这样的东西:
Lucas 353453
Viny 9234
Froid 934586
在循环中使用 grep
和 wc
,您可以计算单词的每次出现次数,而不仅仅是行数。
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