每个文本文件中相同行的数目

每个文本文件中相同行的数目

我有超过 30 个不同的文本文件,每个文件都有一个重复不同时间的相同单词,例如在 text1“esr”中重复 12 次,在 text2“esr”中重复 21 次。

是否可以用一个命令单独输出该单词重复的次数?

答案1

grep+厕所管道:

for f in *.txt; do echo -n "$f "; grep -wo 'esr' "$f" | wc -l; done

grep选项:

  • -w- 单词正则表达式(匹配整个/单独的单词)

  • -o- 只打印匹配的子字符串


  • wc -l- 计算每个文件的行数(在我们的例子中是匹配的单词)

答案2

strings ./*.txt|tr " " "\n"|sort|uniq -c

答案3

使用grep查找所有实例,然后使用以下方法计算唯一行数uniq -c

grep "word" * | sort | uniq -c

如果您希望每个输入文件都匹配,请使用grep -c

grep -c "word" * 

答案4

如果您想计算任意数量文件中的每个单词,您可以使用AWK例如:

awk 'BEGIN{RS="[[:space:]]+"}
     {counts[$0]++}
     END{for(word in counts){print word " - " counts[word]}
     ' file1 file2 file...

这会将文件视为每个单词都在单独的行上,那就是BEGIN{RS="[[:space:]]+"} 部分,然后每次看到一个时进行计数线。删除该BEGIN部分将计算每个普通的线。

如果您只对 1 个特定单词感兴趣,您可以将该END块更改为如下所示:

END{print counts["esr"]}

这只会打印“esr”出现的时间,但请记住这是区分大小写的。

要消除区分大小写,请使用counts[tolower($0)]++counts[toupper($0)]++

当计数从一个文件转到下一个文件时,也可以添加检查以打印数据。

相关内容