
目录一. 查询两个文件第一列的数据并去重二. 抽取日志中指定的字段三. 服务器指定时间点异常查询四. 从csv文件中抽取指定的数据五. 获取除了空白行和注释之外的部分一. 查询两个文件第一列的数据并去重file1.log123 aaa 你好 345 bbb 我好 345 ccc 大家好 124 ddd 世界好 111 rrr 哈哈哈file2.log123 mmm 你好mmm 366 nnn 我好nnn 377 fff 大家好fff 124 uuu 世界好uuu 111 iii 哈哈哈iii分析两个文本文件格式相同都是3列第一例都是数字编号。可以通过打开这两个文件然后获取出开头列然后排序之后再去重。转换为linux命令之后就是通过cat命令同时打开两个文本文件-o配置项只输出匹配到的内容^\S*匹配开头不为空的内容sort用来排序uniq用来去重catfile1.log file2.log|egrep-o-a^\S*|sort|uniq111 123 124 345 366 377如果我们想查看每个数字编码出现的次数的话给uniq命令加上-c配置项即可。其中第一列是数字编码出现的次数。catfile1.log file2.log|egrep-o-a^\S*|sort|uniq-c2 111 1 123 2 124 2 345 1 366 1 377二. 抽取日志中指定的字段有如下日志file4.log日志分内容分为2类SEQIN 和 SEQOUTSEQIN 类中存在若干字段内容isuuePayIduuidjmw_statemethod等等2323 SEQIN mmm isuuePayId5768awe uuidwoenoo; jmw_statesuccess methodpaypay infoppp 2323 SEQOUT COST45726 2345 SEQIN mmm isuuePayId34895ry uuid;ljkler jmw_statefaile methodalipay infoddd 2345 SEQOUT COST34855需求抽取出SEQIN类日志中的第一个字段isuuePayId 和 jmw_state 字段让其在一行显示⏹第一步抽取SEQIN类日志去除掉 SEQOUT 日志grep-aSEQINfile4.log2323 SEQIN mmm isuuePayId5768awe uuidwoenoo; jmw_statesuccess methodpaypay infoppp 2345 SEQIN mmm isuuePayId34895ry uuid;ljkler jmw_statefaile methodalipay infoddd⏹第二步获取出SEQIN类日志中的第一个字段isuuePayId 和 jmw_state 字段grep-aSEQINfile4.log|egrep-o-a-e^\S*-eisuuePayId\S*-ejmw_state\S*2323 isuuePayId5768awe jmw_statesuccess 2345 isuuePayId34895ry jmw_statefaile⏹第三步让isuuePayId和jmw_state到一行上显示grep-aSEQINfile4.log# 进一步过滤|egrep-o-a-e^\S*-eisuuePayId\S*-ejmw_state\S*# 替换指定字段的换行符|sed:loop; N; $!b loop; ;s/\n\([ij]\)/ \1/g2323 isuuePayId5768awe jmw_statesuccess 2345 isuuePayId34895ry jmw_statefaile三. 服务器指定时间点异常查询需求由于上午发生网络波动导致部分业务发生了异常现在需要查询出网络波动时间点和异常的件数哪个服务器发生的异常具体发生了什么的异常⏹查询发生的件数版本1以ERROR 或 Exception 为关键词进行检索c1A03a,c1Ae*a,c1Be*a都是服务器的名称同一个请求可能会发生多个异常因此这种查询方式得到的件数可能会存在重复grep-ae\[ERROR\]-aeException/logback/{c1A03a,c1Ae*a,c1Be*a}/tomcat/current/logs/ spl/.20240331*mpl*app.log|wc-l⏹查询发生的件数版本2grep-ae\[ERROR\]-aeException/logback/{c1A03a,c1Ae*a,c1Be*a}/tomcat/current/logs/ spl/.20240331*mpl*app.log|grep-a09:0[5-9]:[0-5][0-9]|egrep-o^\S*|sort|uniq-c|wc-l⏹查询发生异常的服务器名称根据时间点缩小范围查询开头不为空的部分(含有日志路径和线程号部分)排序之后去重之所以会用awk {print $1}是因为排序之后去重之后获取到的内容之前会加上一个数字用来表示当前行的重复数量若仅排序去重不使用awk {print $1}处理数据的大致样式如下1/logback/c1Ae01a/tomcat/current/logs/spl/.2024033109mpl_test1_app.log:03210429-477895/logback/c1Ae12a/tomcat/current/logs/spl/.2024033109mpl_test2_app.log:03210154-243893/logback/c1Be07a/tomcat/current/logs/spl/.2024033109mpl_bis01_app.log:06334561-95267将查询结果放入result.log文件中grep-ae\[ERROR\]-aeException/logback/{c1A03a,c1Ae*a,c1Be*a}/tomcat/current/logs/ spl/.20240331*mpl*app.log|grep-a09:0[5-9]:[0-5][0-9]|egrep-o^\S*|sort|uniq-c|awk{print $1}result.log⏹result.log的内容如下:之前的部分是日志所在的路径从路径中可以找出服务器的名称:之后的部分是请求的线程号通过该线程号可以详细的抽出日志/logback/c1Ae01a/tomcat/current/logs/spl/.2024033109mpl_test1_app.log:03210429-47789 /logback/c1Ae12a/tomcat/current/logs/spl/.2024033109mpl_test2_app.log:03210154-24389 /logback/c1Be07a/tomcat/current/logs/spl/.2024033109mpl_bis01_app.log:06334561-95267四. 从csv文件中抽取指定的数据⏹sftp_data.csvAAA,222,333,20240604,20 AAA,222,333,20240604,10 BBB,444PPP,555SS,20240605,20 BBB,444,555SS,20240610,20 CCC,555,666SS,20240605,10 CCC,666,666SS,20240603,20需要从上面的csv文件中抽取第四列的从20240601~20240605的数据第五列为20的数据⏹grep ^.*,.*,.*,2024060[1-5],20 sftp_data.csv前3列为任意值后两列指定正则表达式和具体的值fengyehongubuntu:~/jmw_work_space/20270720$grep^.*,.*,.*,2024060[1-5],20sftp_data.csv AAA,222,333,20240604,20 BBB,444PPP,555SS,20240605,20 CCC,666,666SS,20240603,20五. 获取除了空白行和注释之外的部分cat file3.txt | grep -v ^# | grep -v ^$下面这两种方式也可以实现相同的效果grep-vP^\s*(#|$)/etc/squid/squid.confgrep-vE^[[:space:]]*(#|$)/etc/squid/squid.conf