📌  相关文章
📜  linux count 单词在文件中出现的次数 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:02:41.935000             🧑  作者: Mango

Linux 统计文件中单词出现次数

在 Linux 系统中,我们可以使用 Shell 来统计一个文件中某个单词出现的次数。下面将会介绍两种实现方式。

方式一

最简单的方法是使用 grep 命令搭配 wc 命令实现。grep 命令用于查找匹配的字符串,wc 命令用于计算字符数、单词数、行数等。

先来看一个示例,统计 "Hello" 这个单词在文件 test.txt 中出现的次数:

grep -o "Hello" test.txt | wc -l

解释一下上面的命令:

  • grep -o "Hello" test.txt
    • 在文件 test.txt 中查找所有包含 "Hello" 的字符串,并将它们输出到屏幕上。
    • -o 表示只输出匹配到的字符串。
  • | (竖杠)
    • 将上一个命令的输出结果作为下一个命令的输入。
  • wc -l
    • 统计输入中的行数,并输出到屏幕上。
    • -l 表示只统计行数。

这样,我们就可以得到 "Hello" 在文件 test.txt 中出现的次数了。

接下来,将上述命令封装成一个脚本 count_word.sh:

#!/bin/bash

if [ $# -ne 2 ]; then
  echo "Usage: $0 word filename"
  exit 1
fi

grep -o $1 $2 | wc -l

保存并赋予该脚本可执行权限:

chmod +x count_word.sh

使用示例:

./count_word.sh "Hello" test.txt

输出:

3
方式二

除了使用 grep 命令,我们还可以使用 awk 命令来实现。awk 是一种文本处理工具,它处理文本时按行来进行处理,将文件中每一行看成一个记录,将每一行分成若干个字段进行处理。

下面是用 awk 实现统计单词出现次数的脚本 count_word_with_awk.sh:

#!/bin/bash

if [ $# -ne 2 ]; then
  echo "Usage: $0 word filename"
  exit 1
fi

awk -v word="$1" '{ for (i=1; i<=NF; i++) if ($i == word) n++; } END { print n }' $2

解释一下上述脚本:

  • -v word="$1"
    • 将脚本的第一个参数 "$1" 赋值给变量 word。
  • '{ for (i=1; i<=NF; i++) if ($i == word) n++; }'
    • 遍历当前行的每个字段,如果和单词 word 相等,则计数器 n 自增。
    • NF 表示当前行的字段数。
  • END { print n }
    • 当处理完所有记录后(也就是处理完整个文件),输出计数器 n 的值。

使用示例:

./count_word_with_awk.sh "Hello" test.txt

输出:

3
总结

以上两种方法都可以统计文件中单词出现的次数,不过使用 awk 命令比较灵活,可以统计多个单词。不过,如果文件比较大,awk 命令需要对整个文件进行遍历,可能会比 grep 命令慢一些。