应用日志统计分析Linux常用命令

1,608 阅读2分钟

 一、awk命令

​ AWK 是一种处理文本文件的语言,是一个强大的文本分析工具, 属于数据处理引擎,基于模式匹配检查输入文本,逐行处理并输出。通常用在Shell脚本中,获取指定的数据,单独使用时,可对文本数据做统计。

1、awk语法格式

  • 格式1:前置命令 | awk [选项] ‘条件{编辑指令}' 文件
  • 格式2:awk [选项] ‘条件{编辑指令}' 文件
  • 格式3:awk  [选项]  ' BEGIN{编辑指令 } {编辑指令} END{编辑指令}'  文件

2、常用的选项

-F:指定分隔符,可以指定多个,可省略(默认空格或Tab位)

-V:调用外部变量 variable

3、awk内置变量

FS :保存或设置字段分隔符,如FS=”:”

$n :指定分隔的第n个字段,如、​3分别表示第1、第3列

$0 :当前读入的整行文本内容

NF :记录当前处理行的字段个数(列数)

NR :记录当前已读入行的数量(行数)

FNR :当前行在源文件中的行号

4、案例

a.log内容如下:

aaaaaaaaaa,bbbbbbbbbbbb,cccccccaaaaaaaaaa,bbbbbbbbbbbb,cccccccaaaaaaaaaa,bbbbbbbbbbbb,ccccccc

  • 取出a.log文件按(,)分隔后的第一列
awk -F "," '{print $1}' a.log 
输出:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa

b.log内容如下:

I am mike,my mobile is 88848

  • 如果要取出mike和88848
awk -F '[ ,]+' '{print $3" "$7}' b.log   #指定了空格和,号为分隔符
输出
mike 88848

  • 查看c.log文件第2到第3行的内容
awk '{if(NR>=2 && NR<=3) print $0}' c.log

  • 统计用户有多少个
awk '{count++;print $0;} END{print "user count is ",count}' /etc/passwd 

  • BEGIN和END代码块
awk -F":" 'BEGIN{print "开始处理前执行该语句,一般是初始化变量"}{ print "username: " $1 "}END{print "处理结束后执行该语句,一般用于统计"}' /etc/passwd
输出:
开始处理前执行该语句,一般是初始化变量
username: root
username: XXXXX
username: XXX 
username: XXXXX
处理结束后执行该语句,一般用于统计

二、sort命令

​ sort命令将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

1、sort语法格式

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]

2、常用选项

-f  :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b  :忽略最前面的空格符部分;
-M  :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n  :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r  :反向排序;
-u  :就是 uniq ,相同的数据中,仅出现一行代表;
-t  :分隔符,默认是用 [tab] 键来分隔;
-k  :以那个区间 (field) 来进行排序的意思

3、案例

a.log文件内容
apple,5,2.6
orange,8,8
banana,3,7.2
pear,6,4
[www@test /]$ sort a.log
apple,5,2.6
banana,3,7.2
orange,8,8
pear,6,4
​
[www@test /]$ sort -r a.log
pear,6,4
orange,8,8
banana,3,7.2
apple,5,2.6
​
[www@test /]$ sort -t , -k 2 a.log  #用,号分割,按第二列排序
banana,3,7.2
apple,5,2.6
pear,6,4
orange,8,8

三、uniq命令

​ uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。

1、uniq语法格式

uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]

2、常用参数

-i   :忽略大小写字符的不同;
-c  :进行计数
-u  :只显示唯一的行

3、案例

b.log内容
banana,3,7.2
apple,5,2.6
pear,6,4
orange,8,9
apple,5,2.6
banana,3,7.2
[www@test /]$ uniq -c b.log    #必须是相邻的相同行才会统计
1 banana,3,7.2
1 apple,5,2.6
1 pear,6,4
1 orange,8,9
1 apple,5,2.6
1 banana,3,7.2
[www@test /]$  sort b.log |uniq -c   #结合sort命令
2 apple,5,2.6
2 banana,3,7.2
1 orange,8,9
1 pear,6,4
www@test /]$ 

四、wc命令

​ 用于统计字数。

1、wc语法格式

wc [-clw][--help][--version][文件...]

2、常用参数

-l  :仅列出行;
-w  :仅列出多少字(英文单字);
-m  :多少字符;

3、案例

www@test /]$ wc -l b.log #统计b.log文件行数
6 b.log 
​
www@test /]$ 

五、xargs命令

​ xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就了 xargs 命令

1、xargs命令格式

somecommand |xargs -item  command

2、常用选项

  • -a file 从文件中读入作为 stdin
  • -e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
  • -p 当每次执行一个argument的时候询问一次用户。
  • -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
  • -t 表示先打印命令,然后再执行。
  • -i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
  • -r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
  • -s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
  • -L num 从标准输入一次读取 num 行送给 command 命令。
  • -l 同 -L。
  • -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
  • -x exit的意思,主要是配合-s使用。

3、案例

#a.log内容
a b c d e f g h i j k l m n o p q r s t u v w x y z
www@test /]$ cat a.log | xargs -n3   #-n 选项多行输出
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z
​
#
www@test /]$ echo "name#name#name#name" | xargs -d#   #-d 选项可以自定义一个定界符
name name name namewww@test /]$ echo "name#name#name#name" | xargs -d# -n2
name name
name name#xargs 的一个选项 -I,使用 -I 指定一个替换字符串 {},这个字符串在 xargs 扩展时会被替换掉,当 -Ixargs 结合使用,每一个参数命令都会被执行一次:
www@test /]$ cat a.log | xargs -I {} echo {} 
apple,5,2.6
orange,8,8
banana,3,7.2
pear,6,4

六、grep命令

grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

1、grep命令格式

grep [-acinv] [--color=auto] '搜寻字符串' filename

2、常用选项

-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示

3、案例

#a.log内容
xxxxxxxxxxxxxxxx
xxxxxxxxxxx,user_id=999,xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx,name=Lan,xxxxxxxxxxxxxxxxx
xxxxxxxxxxx,user_id=999,xxxxx
​
$ grep -n --color=auto "999"  a.log
2:xxxxxxxxxxx,user_id=999,xxxxxxxxxxxxxxxx
6:xxxxxxxxxxx,user_id=999,xxxxx
​
​
$ grep -c --color=auto "999"  a.log
2
​
$ grep -i --color=auto "lan"  a.log
xxxxxxxxxxxxxxx,name=Lan,xxxxxxxxxxxxxxxxx
​
$ grep -i --color=auto "此处可以写正则表达式"  a.log

欢迎大家关注我的订阅号,会定期分享一些关于软件测试相关的文章,有问题也欢迎一起讨论学习!
在这里插入图片描述

\