Linux统计某个字符串出现次数并排序的实现步骤

 更新时间:2024年07月23日 08:52:05   作者:smileNicky  
最近遇到一个流量异常调用的接口,所以需要通过后台日志查看接口调用情况,先统计今天内接口的调用次数,再具体到对应的设备号,所以本文给大家介绍了Linux统计某个字符串出现次数并排序的实现步骤,需要的朋友可以参考下

业务场景

最近遇到一个流量异常调用的接口,所以需要通过后台日志查看接口调用情况,先统计今天内接口的调用次数,再具体到对应的设备号,就知道哪台设备有问题了,初步想到wc和awk命令来筛选统计,但是真正去写的时候,发现很多写法都不太记得了,所以花了点时间去查手册,找资料,现在整理成博客,方便以后需要就马上统计出来,也分享出来,希望可以帮助需要的人

项目环境

  • JDK1.8.0_111-b14
  • Linux3.10.0-1062.el7.x86_64
  • Apache Tomcat/8.5.85

实验步骤

统计某个接口调用次数,可以通过grep筛选出对应得到接口,然后加上wc统计出调用次数

cat catalina.out.2024-03-26| grep "/api/get"| wc -l

如果要统计这个接口具体是哪个设备调用的,每个设备具体的调用次数,就稍微有点麻烦,因为接口请求后,会有一个请求参数,一般是json传参的,所以思路是先用grep定位到具体的接口,然后解析传参json字符串,获取设备号code,对应的值value,然后使用uniq加上sort统计出这个设备调用的次数,具体的linux命令是:

cat catalina.out.2024-03-26| grep "/api/get"| awk -F "[,:}]" '{for(i=1;i<=NF;i++){if($i~"code"){print $(i+1)} }}' | tr -d '"'| sort | uniq -c | sort -nr

不熟悉的读者看起来有点懵,所以,一点点分析一下,为什么这样写?

  • 查看日志
    因为是tomcat部署的后端服务,所以要查看tomcat的catalina.out日志文件,使用cat命令
cat catalina.out.2024-03-26
  • 筛选出具体的api接口
cat catalina.out.2024-03-26| grep "/api/get"
  • 筛选请求json字符串对应设备号的value值
    首选,我们请求参数是一串json字符串,假如是这样的:
{ "code", "0B403940FF289695FC093BF2556FFD75", "type":1}

所以需要获取json对应key,也就是我们的设备号code,对应的值0B403940FF289695FC093BF2556FFD75

cat catalina.out.2024-03-26| grep "/api/get" | awk -F "[,:}]" '{for(i=1;i<=NF;i++){if($i~"code"){print $(i+1)} }}'

解释一下awk对应参数

  1. awk -F "[,:}]" :按照中括号中的内容,}:依次分割字符串
  2. {for(i=1;i<=NF;i++){if($i~"code"){print $(i+1)} }}:遍历筛选出来的数据,匹配到code打印出对应的value

通过上面的linux命令,打印出来的是

"0B403940FF289695FC093BF2556FFD75"
"0B403940FF289695FC093BF2556FFD76"
....

如果觉得比较别扭,可以去掉"字符,使用命令

tr -d '"'

打印:

0B403940FF289695FC093BF2556FFD75
0B403940FF289695FC093BF2556FFD76
....
  • 统计字符串出现的次数
    统计字符串重复次数,可以使用uniq -c,然后为什么还要在前面加上sort命令?因为uniq这个命令只能统计连续的的重复行。所以需要结合sort命令使用,先sort排序,然后uniq统计重复的行
sort | uniq -c

打印,可以看出可以统计数量了,但是,没排序

1000 0B403940FF289695FC093BF2556FFD75
1001 0B403940FF289695FC093BF2556FFD76
999 0B403940FF289695FC093BF2556FFD77
....
  • 按照调用次数进行倒序
    sort命令的-n表示按照数值排序,-r表示按照数值降序排序,所以需要加上排序命令
sort -nr
999 0B403940FF289695FC093BF2556FFD77
1000 0B403940FF289695FC093BF2556FFD75
1001 0B403940FF289695FC093BF2556FFD76

....

总结归纳

如果遇到param=0b33131等等这样传参的可以使用如下命令进行筛选,意思是使用param=作为分隔符

 awk -F '(param=)' '{print $2}'

如果遇到和本文类似的场景,直接使用命令进行统计即可:

cat catalina.out.2024-03-26| grep "/api/get"| awk -F "[,:}]" '{for(i=1;i<=NF;i++){if($i~"code"){print $(i+1)} }}' | tr -d '"'| sort | uniq -c | sort -nr

到此这篇关于Linux统计某个字符串出现次数并排序的实现步骤的文章就介绍到这了,更多相关Linux统计字符串出现次数并排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何解决Diffie-Hellman Key Agreement Protocol资源管理错误漏洞(CVE-2002-20001)

    如何解决Diffie-Hellman Key Agreement Protocol资源管理

    文章主要介绍了资源管理错误漏洞的修复项目,特别提到Diffie-HellmanKeyAgreementProtocol是一种密钥协商协议,该协议存在安全漏洞,文章建议在配置文件中正确写入kexalgorithms,避免语法错误导致sshd服务无法启动,从而无法通过SSH连接服务器
    2024-12-12
  • 你知道一台Linux服务器可以负载多少个连接吗

    你知道一台Linux服务器可以负载多少个连接吗

    这篇文章主要给大家介绍了关于一台Linux服务器可以负载多少个连接的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux服务器具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Apache启动错误Permission denied: httpd: could not open error log file解决方法

    Apache启动错误Permission denied: httpd: could not open error log

    这篇文章主要介绍了Apache启动错误Permission denied: httpd: could not open error log file解决方法,需要的朋友可以参考下
    2014-07-07
  • Linux下部署kettle并配置定时调度过程

    Linux下部署kettle并配置定时调度过程

    文章介绍了在Linux系统下部署Kettle并配置定时调度的详细步骤,包括安装Java、Kettle,同步资源库和添加jar包,测试任务执行,安装webkitgtk以消除图形界面警告,以及使用crontab进行定时调度
    2026-01-01
  • 跨域请求 Apache 服务器配置的方法

    跨域请求 Apache 服务器配置的方法

    这篇文章主要介绍了跨域请求 Apache 服务器配置的方法,包括修改服务器配置文件的方法和如何编辑httpd.conf。接下来,通过本文给大家重点讲解,需要的朋友参考下吧
    2017-01-01
  • 你必须知道Linux系统的七种优势

    你必须知道Linux系统的七种优势

    你必须知道Linux系统的七种优势,越来越多的电脑用户开始使用 Linux进行办公、学习,这篇文章主要介绍了Linux系统的多种优势,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Linux的wget命令详解

    Linux的wget命令详解

    这篇文章主要为大家详细介绍了Linux的wget命令,教大家如何使用wget,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Linux中tail命令用法详解

    Linux中tail命令用法详解

    tail命令也是一个非常常用的文件查看类的命令,接下来通过本篇文章给大家介绍linux中tail命令的用法详解,感兴趣的朋友一起看看吧
    2016-09-09
  • Linux使用touch命令创建空文件的技巧分享

    Linux使用touch命令创建空文件的技巧分享

    在 Linux 操作系统中,touch 命令是一个看似简单却功能强大的工具,虽然它的主要用途是更新文件的时间戳,但它在创建空文件方面也扮演着至关重要的角色,本文将深入探讨 touch 命令的各种用法,需要的朋友可以参考下
    2026-01-01
  • 使用Hyper-v虚拟机安装Centos7

    使用Hyper-v虚拟机安装Centos7

    本文详细讲解了使用Hyper-v虚拟机安装Centos7的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12

最新评论