jck28-lucio-linux常用统计命令

统计命令分类

  • 排序- sort
  • 去重- uniq
  • 统计- wc

复制/home下test文件夹到lucio目录下
[jck287213@shell.ceshiren.com ~]$ ls /home/test/
sort_h sort_n sort_t sort_V uniq_demo.txt wc_demo.txt
[jck287213@shell.ceshiren.com ~]$ ls
1.txt 2.txt feier f.tar.gz hogwarts test.sh
[jck287213@shell.ceshiren.com ~]$ mkdir -p lucio/test
[jck287213@shell.ceshiren.com ~]$ ls
1.txt 2.txt feier f.tar.gz hogwarts lucio test.sh
[jck287213@shell.ceshiren.com ~]$ cd lucio/
[jck287213@shell.ceshiren.com lucio]$ ls
test
[jck287213@shell.ceshiren.com lucio]$ rm -rf test
[jck287213@shell.ceshiren.com lucio]$ cp -a /home/test …/lucio/
[jck287213@shell.ceshiren.com lucio]$ ls
test
[jck287213@shell.ceshiren.com lucio]$ cd test
[jck287213@shell.ceshiren.com test]$ ls
sort_h sort_n sort_t sort_V uniq_demo.txt wc_demo.txt

排序 sort

  • sort 常用参数
    • -b:忽略开头的空白字符
    • -f:将小写字母看做大写字母
    • -h:根据存储容量排序(KB、MB、GB)
    • -n:按数字排序
    • -o:把结果写入文件
    • -r:以相反的顺序来排序(降序排列,默认是升序)
    • -t:指定分隔符,默认为空格
    • -V:按照数字版本排序
    • -k:指定排序的关键字,与-t 参数配合使用
  • -u: 去除重复行
  • -R: 随机排序,每次运行的结果均不同

sort_h

[jck287213@shell.ceshiren.com test]$ cat sort_h
60MB
10
1000KB
20MB
300KB
5
A
40GB
50KB

[jck287213@shell.ceshiren.com test]$ cat sort_h | sort
10
1000KB
20MB
300KB
40GB
5
50KB
60MB
A
[jck287213@shell.ceshiren.com test]$ cat sort_h | sort -h(按容量从小到大)
A
5
10
50KB
300KB
1000KB
20MB
60MB
40GB
[jck287213@shell.ceshiren.com test]$ cat sort_h | sort -hr(按容量从大到小)
40GB
60MB
20MB
1000KB
300KB
50KB
10
5
A

sort_n

[jck287213@shell.ceshiren.com test]$ cat sort_n
01
00
0
70
78
67
23
30
09
44002
32010
32102
5743
3306
[jck287213@shell.ceshiren.com test]$ cat sort_n | sort ( 默认情况下,sort()方法按升序排列数组项——即最小的值位于最前面,最大的值排在最后面
0
00
01
09
23
30
32010
32102
3306
44002
5743
67
70
78
[jck287213@shell.ceshiren.com test]$ cat sort_n | sort -nr(按数字大小反序排列)
44002
32102
32010
5743
3306
78
70
67
30
23
09
01
00
0
[jck287213@shell.ceshiren.com test]$ cat sort_n | sort -nr -o 1.txt(将查询结果保存到文本文件)
[jck287213@shell.ceshiren.com test]$ ls
1.txt sort_h sort_n sort_t sort_V uniq_demo.txt wc_demo.txt
[jck287213@shell.ceshiren.com test]$ cat 1.txt
44002
32102
32010
5743
3306
78
70
67
30
23
09
01
00
0

sort_t

[jck287213@shell.ceshiren.com test]$ cat sort_t
1.2.3.4
2.1.2.3
3.3.4.2
8.7.6.4
6.4.9.7

1SP2SP3SP4
2SP1SP2SP3
3SP3SP4SP2
8SP7SP6SP4
6SP4SP9SP7
[jck287213@shell.ceshiren.com test]$ cat sort_t | sort -t . -k 1 (以点位分隔符,去第1列升序排列)

1.2.3.4
1SP2SP3SP4
2.1.2.3
2SP1SP2SP3
3.3.4.2
3SP3SP4SP2
6.4.9.7
6SP4SP9SP7
8.7.6.4
8SP7SP6SP4
[jck287213@shell.ceshiren.com test]$ cat sort_t | sort -t . -k 2(以点位分隔符,去第2列升序排列)

1SP2SP3SP4
2SP1SP2SP3
3SP3SP4SP2
6SP4SP9SP7
8SP7SP6SP4
2.1.2.3
1.2.3.4
3.3.4.2
6.4.9.7
8.7.6.4
[jck287213@shell.ceshiren.com test]$ cat sort_t | sort -t . -k 3(以点位分隔符,去第3列升序排列)

1SP2SP3SP4
2SP1SP2SP3
3SP3SP4SP2
6SP4SP9SP7
8SP7SP6SP4
2.1.2.3
1.2.3.4
3.3.4.2
8.7.6.4
6.4.9.7
[jck287213@shell.ceshiren.com test]$ cat sort_t | sort -t . -k 4(以点位分隔符,去第4列升序排列)

1SP2SP3SP4
2SP1SP2SP3
3SP3SP4SP2
6SP4SP9SP7
8SP7SP6SP4
3.3.4.2
2.1.2.3
1.2.3.4
8.7.6.4
6.4.9.7
[jck287213@shell.ceshiren.com test]$ cat sort_t | sort -t S -k 4(以S位分隔符,取第4列升序排列)

1.2.3.4
2.1.2.3
3.3.4.2
6.4.9.7
8.7.6.4
3SP3SP4SP2
2SP1SP2SP3
1SP2SP3SP4
8SP7SP6SP4
6SP4SP9SP7
[jck287213@shell.ceshiren.com test]$ cat sort_t | sort -t S -k 3(以S位分隔符,取第3列升序排列)

1.2.3.4
2.1.2.3
3.3.4.2
6.4.9.7
8.7.6.4
2SP1SP2SP3
1SP2SP3SP4
3SP3SP4SP2
8SP7SP6SP4
6SP4SP9SP7
[jck287213@shell.ceshiren.com test]$ cat sort_t | sort -t SP -k 3(只能以一个字母为分隔符,不能一多个字母为分隔符)
sort: multi-character tab ‘SP’
[jck287213@shell.ceshiren.com test]$ cat sort_t | sort -t P -k 3 (以P位分隔符,取第3列升序排列)

1.2.3.4
2.1.2.3
3.3.4.2
6.4.9.7
8.7.6.4
2SP1SP2SP3
1SP2SP3SP4
3SP3SP4SP2
8SP7SP6SP4
6SP4SP9SP7

sort_V

[jck287213@shell.ceshiren.com test]$ cat sort_V
Docker v10.2.3
Docker v1.4.7
Docker v5.2.8
docker o.x.5.1
[jck287213@shell.ceshiren.com test]$ cat sort_V | sort
docker o.x.5.1
Docker v10.2.3
Docker v1.4.7
Docker v5.2.8
[jck287213@shell.ceshiren.com test]$ cat sort_V | sort -V(按照版本信息升序排列)
Docker v1.4.7
Docker v5.2.8
Docker v10.2.3
docker o.x.5.1

去重 uniq

  • uniq 常用参数
    • -c:统计重复出现的次数
    • -d:所有邻近的重复行只被打印一次。重复次数要大于等于 2
    • -D:所有邻近的重复行将全部打印
    • -f:跳过对前 n 个列的比较
    • -s:跳过对前 n 个字符的比较
    • -w:只对每行前 n 个字符进行比较

[jck287213@shell.ceshiren.com test]$ head uniq_demo.txt -n 5
ck141906 pts/0 120.52.147.49
ck140081 pts/13 113.65.231.23
ck140081 pts/12 113.65.231.23
ck140081 pts/4 221.219.101.182
82894931 pts/12 36.112.85.179
[jck287213@shell.ceshiren.com test]$ uniq -c -f 2 uniq_demo.txt (跳过前2列对ip地址统计–隔了一行的不能统计)
1 ck141906 pts/0 120.52.147.49
2 ck140081 pts/13 113.65.231.23
1 ck140081 pts/4 221.219.101.182
1 82894931 pts/12 36.112.85.179
2 18221511 pts/10 223.71.133.42
1 68821400 pts/4 183.63.81.211
[jck287213@shell.ceshiren.com test]$ cat uniq_demo.txt | sort -k 3|uniq -c -f 2 | sort -k 1 -nr(取第3列排序,排除前2列取第3列统计ip,取第一列统计数字按数字类型升序排序)
14 18221511 pts/10 223.71.133.42
4 ck143117 pts/11 60.208.90.202
4 21609891 pts/12 101.230.255.202
3 ck146119 pts/10 116.237.250.188
3 ck141731 pts/14 61.140.133.96
[jck287213@shell.ceshiren.com test]$ cat uniq_demo.txt | uniq -f 2 -d(只取出现2次或者以上的ip去重展示)
ck140081 pts/13 113.65.231.23
18221511 pts/10 223.71.133.42
root pts/10 223.71.133.42
ck146119 pts/11 116.237.250.188
root pts/5 223.71.133.42
18221511 pts/9 223.71.133.42
21609891 pts/9 101.230.255.202
21609891 pts/4 58.35.66.243
70146364 pts/10 106.39.114.134
ck140752 pts/2 111.202.144.35
[jck287213@shell.ceshiren.com test]$ cat uniq_demo.txt | uniq -f 2 -D(只取出现2次或者以上的ip不去重展示)
ck140081 pts/13 113.65.231.23
ck140081 pts/12 113.65.231.23
18221511 pts/10 223.71.133.42
18221511 pts/2 223.71.133.42
root pts/10 223.71.133.42
18221511 pts/5 223.71.133.42
18221511 pts/4 223.71.133.42
ck146119 pts/11 116.237.250.188
ck146119 pts/10 116.237.250.188
root pts/5 223.71.133.42
18221511 pts/3 223.71.133.42
18221511 pts/9 223.71.133.42
18221511 pts/9 223.71.133.42
root pts/5 223.71.133.42
root pts/4 223.71.133.42
18221511 pts/3 223.71.133.42
21609891 pts/9 101.230.255.202
21609891 pts/4 101.230.255.202
21609891 pts/4 58.35.66.243
21609891 pts/3 58.35.66.243
70146364 pts/10 106.39.114.134
70146364 pts/4 106.39.114.134
ck140752 pts/2 111.202.144.35
ck140752 pts/10 111.202.144.35
[jck287213@shell.ceshiren.com test]$ cat uniq_demo.txt | uniq -s 14 -D(排除前14个字符的内容大于2次以及以上的ip展示)
18221511 pts/5 223.71.133.42
18221511 pts/4 223.71.133.42
18221511 pts/3 223.71.133.42
18221511 pts/9 223.71.133.42
root pts/5 223.71.133.42
root pts/4 223.71.133.42
21609891 pts/9 101.230.255.202
21609891 pts/4 101.230.255.202
21609891 pts/4 58.35.66.243
21609891 pts/3 58.35.66.243
[jck287213@shell.ceshiren.com test]$ cat uniq_demo.txt | uniq -w 4 -c | sort -k 1 -n (取前4个相同字符进行统计排序)
4 ck146119 pts/2 116.237.250.188
4 ck141906 pts/0 120.52.147.49
3 21609891 pts/10 58.35.66.243
2 root pts/5 223.71.133.42
2 ck146400 pts/2 112.10.50.241
2 ck140752 pts/2 111.202.144.35
2 70146364 pts/10 106.39.114.134
2 21609891 pts/4 58.35.66.243
2 18221511 pts/5 223.71.133.42
2 18221511 pts/3 223.71.133.42
2 18221511 pts/10 223.71.133.42
1 xly20456 pts/2 120.52.147.46
1 root pts/5 223.71.133.42

统计数量 wc

  • wc 常用参数
    • -c:统计字节数:chars
    • -l:统计行数
    • -w:统计但单词数
    • -L:打印最长行的长度

[jck287213@shell.ceshiren.com test]$ cat wc_demo.txt
hello world
hi
hogwarts

[jck287213@shell.ceshiren.com test]$ cat wc_demo.txt | wc(统计行数、单词数,字符数)
4 4 25
[jck287213@shell.ceshiren.com test]$ cat wc_demo.txt | wc -l(统计行数)
4
[jck287213@shell.ceshiren.com test]$ cat wc_demo.txt | wc -c(统计字符数)
25
[jck287213@shell.ceshiren.com test]$ cat wc_demo.txt | wc -w(统计单词数)
4
[jck287213@shell.ceshiren.com test]$ cat wc_demo.txt | wc -L(统计最长行的长度)
11
[jck287213@shell.ceshiren.com test]$