首页 > 解决方案 > 计算文件中出现的字符串

问题描述

我正在尝试使用 shell 脚本计算文件中特定行的出现次数。该文件的内容是:

2019 年 12 月 23 日星期一 06:21:00 [pid 3294] [ftpuser] FTP 响应:客户端“127.0.0.1”、“230 登录成功”。

2019 年 12 月 23 日星期一 06:21:00 [pid 3294] [ftpuser] FTP 响应:客户端“127.0.0.1”、“230 登录成功”。

2019 年 12 月 23 日星期一 06:21:00 [pid 3294] [ftpuser] FTP 响应:客户端“127.0.0.1”、“230 登录成功”。

2019 年 12 月 23 日星期一 06:21:00 [pid 3294] [ftpuser] FTP 响应:客户端“127.0.0.1”、“230 登录成功”。

shell脚本代码为:

file="vsftpd1.log"
count=0
while read str; do
  echo $str
  if [[ $str == *"230 Login successfull."* ]]; 
  then 
      count=$((count+1))
  fi
done < $file
echo $count

最后一行的输出应该是四。我注意到如果条件只执行一次。但它应该运行四次。请帮我找出代码中的错误,如果有的话。提前谢谢!

标签: shell

解决方案


您可以使用grep(匹配出现次数)及其-c(计数出现次数)来简化它。

#!/bin/sh
file=vsftpd1.log
grep -c '230 Login successfull.' "$file"

如果您需要将数字捕获到变量中:

count=$(grep -c '230 Login successfull.' "$file")
echo $count

推荐阅读