shell - 计算文件中出现的字符串
问题描述
我正在尝试使用 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
最后一行的输出应该是四。我注意到如果条件只执行一次。但它应该运行四次。请帮我找出代码中的错误,如果有的话。提前谢谢!
解决方案
您可以使用grep
(匹配出现次数)及其-c
(计数出现次数)来简化它。
#!/bin/sh
file=vsftpd1.log
grep -c '230 Login successfull.' "$file"
如果您需要将数字捕获到变量中:
count=$(grep -c '230 Login successfull.' "$file")
echo $count
推荐阅读
- ubuntu - Vim 8.0:无法在 Ubuntu 18.04 LTS 上禁用自动缩进
- javascript - 对于 CodyHouse 的计划模板,如何将 .load 方法更改为直接使用 jQuery 中的 html 文件中的变量?
- ios - 将统一文件导入已制作的 Xcode 文件
- c# - 如何让 UpdatePanel 为多个按钮工作?
- twilio - twillio studio 发送消息流contact.channel
- tsql - SQL 2017 - 比较两个表之间的值,其中某些值可以为 NULL
- ruby-on-rails - PG::ConnectionBad: FATAL: 用户密码认证失败
- ibm-cloud - IBM Notes 中的错误代码 520 是什么意思?
- java - Hashicorp Vault 让 Vault 生成几个关键值
- python - Ryu SDN 控制器 - 如何获取有关流动数据包的特定信息