Linux-计数排序企业级应用-uniq-sort

1. uniq-报告或者忽略重复的行

默认只对相邻的相同行去重只有一个参数最常用一般和sort命令配合使用用来统计重复行的次数。

NAME
    uniq- report or omit repeated lines
SYNOPSIS
    uniq[OPTION]... [INPUT [OUTPUT]]
常用参数
-c, --count   
    #统计次数会把重复出现行的次数统计好打印到每一行的前面

实例1.1 统计相同内容重复出现的次数

1.1.1 模拟数据

cat >chen.txt<<EOF
10.0.0.9
10.0.0.8
10.0.0.7
10.0.0.7
10.0.0.8
10.0.0.8
10.0.0.9
EOF

1.1.2 觖法

1.1.2.1 思路

  • sort命令可以排序

  • uniq命令可以报告重复行的次数-c参数搞定。

  • sortchen.txt|uniq -c

1.1.2.2 默认只对相邻的相同行去重

[root@m01 ~]# uniq chen.txt
10.0.0.9
10.0.0.8
10.0.0.7
10.0.0.8
10.0.0.9

1.1.2.3 让重复的行相邻

[root@m01 ~]# sort chen.txt
10.0.0.7
10.0.0.7
10.0.0.8
10.0.0.8
10.0.0.8
10.0.0.9
10.0.0.9

1.1.2.4 统计相同行重复出现的次数

[root@m01 ~]# sortchen.txt|uniq -c   #count 
      210.0.0.7
      310.0.0.8
      210.0.0.9

~两条命令的效果是一样的

[root@m01 ~]# sort chen.txt |uniq
10.0.0.7
10.0.0.8
10.0.0.9
[root@m01 ~]# sort -u chen.txt        # unique
10.0.0.7
10.0.0.8
10.0.0.9

实例1.2 取出域名并进行计数排序处理

1.2.1 模拟数据

cat >chen.log<<EOF
http://www.oldboyedu.com/
http://edu.51cto.com/
http://edu.51cto.com/user/user_id-8804946.html
http://www.zhibo8.cc/
http://weibo.com/1995418821/profile?topnav=1&wvr=6
http://chenfage.blog.51cto.com/
http://edu.51cto.com/user/user_id-8804946.html
http://www.oldboyedu.com/
http://www.zhibo8.cc/
http://www.zhibo8.cc/
EOF

1.2.2 解法1awk-sort-uniq

1.2.2.1 思路1

  •  awk取出域名

  •  sort可以排序默认是升序

  •  uniq统计重复行的次数  

  • awk -F /'{print $3}' chen.log |sort|uniq -c|sort -r

1.2.2.2 awk取域名

[root@m01 ~]# awk -F / '{print $3}' chen.log |sort
chenfage.blog.51cto.com
edu.51cto.com
edu.51cto.com
edu.51cto.com
weibo.com
www.oldboyedu.com
www.oldboyedu.com
www.zhibo8.cc
www.zhibo8.cc
www.zhibo8.cc

1.2.2.3 uniq统计重复行次数

[root@m01 ~]# awk -F / '{print $3}' chen.log|sort|uniq -c
      1chenfage.blog.51cto.com
      3edu.51cto.com
      1weibo.com
      2www.oldboyedu.com
      3www.zhibo8.cc

1.2.2.4   sort -r 逆序排序

[root@m01 ~]# awk -F / '{print $3}' chen.log|sort|uniq -c|sort
      1chenfage.blog.51cto.com
      1weibo.com
      2www.oldboyedu.com
      3edu.51cto.com
      3www.zhibo8.cc
[root@m01 ~]# awk -F / '{print $3}' chen.log|sort|uniq -c|sort -r # reverse
      3www.zhibo8.cc
      3edu.51cto.com
      2www.oldboyedu.com
      1weibo.com
      1chenfage.blog.51cto.com
[root@m01 ~]# awk -F / '{print $3}' chen.log|sort|uniq -c|sort -r|head -2
      3www.zhibo8.cc
      3edu.51cto.com

1.2.3 解法2cut-sort-uniq

1.2.3.1 思路2

  • cut指定分隔符来切割-d  

  • sort排序可以逆序  

  • uniq统计相重复行的次数  

  • cut -d/-f3 chen.log|sort|uniq -c|sort -r

1.2.3.2 cut -df 取域名

[root@m01 ~]# cut -d/ -f3 chen.log    #-d, --delimiter(分隔符)-f, --fields(域)
www.oldboyedu.com
edu.51cto.com
edu.51cto.com
www.zhibo8.cc
weibo.com
chenfage.blog.51cto.com
edu.51cto.com
www.oldboyedu.com
www.zhibo8.cc
www.zhibo8.cc

1.2.3.3 sort排序uniq取重复行

[root@m01 ~]# cut -d/ -f3 chen.log|sort
chenfage.blog.51cto.com
edu.51cto.com
edu.51cto.com
edu.51cto.com
weibo.com
www.oldboyedu.com
www.oldboyedu.com
www.zhibo8.cc
www.zhibo8.cc
www.zhibo8.cc
[root@m01 ~]# cut -d/ -f3 chen.log|sort|uniq -c
      1chenfage.blog.51cto.com
      3edu.51cto.com
      1weibo.com
      2www.oldboyedu.com
      3www.zhibo8.cc
[root@m01 ~]# cut -d/ -f3 chen.log|sort|uniq-c|sort -r
      3www.zhibo8.cc
      3edu.51cto.com
      2www.oldboyedu.com
      1weibo.com
      1chenfage.blog.51cto.com
[root@m01 ~]# cut -d/ -f3 chen.log|sort|uniq-c|sort -r|head -2
      3www.zhibo8.cc
      3edu.51cto.com


2. sort-排序

以行为单位对文件进行排序。

NAME
    sort -sort lines of text files #给文本文件的行排序
SYNOPSIS
    sort[OPTION]... [FILE]...
常用参数
-r,--reverse       #序列默认是升序
-u,--unique        #相同的行只输出一行
-k,--key=POS1[,POS2]   #指定第几列或第几列的第几个字符
-t,--field-separator=SEP #指定分隔符默认是空格
-n,--numeric-sort     #根据字符串的数值进行排序

实例2.1 对指定的列逆序排序

2.1.1 模拟数据

cat >chen.txt<<EOF
192.168.3.1 c
192.168.3.2 n
192.168.12.41 w
192.168.2.20 g
192.168.3.3 a
192.168.2.22 p
192.168.0.152 l
192.168.22.33 u
192.168.1.10 f
192.168.0.150 y
192.168.2.20 e
192.168.30.2 t
EOF

2.1.2 解法

2.1.2.1 思路

  • -t指定分隔符  

  • -k指定以第几列为标准  

  • -r逆序  

  • sort-t" " -rk2 chen.txt

2.1.2.2 操作过程

[root@m01 ~]# sort -t" " -k2 chen.txt # -t指定分隔符为空格,-k指定第几列
192.168.3.1 c
192.168.2.20 e
192.168.1.10 f
192.168.2.20 g
192.168.0.152 l
192.168.3.2 n
192.168.2.22 p
192.168.30.2 t
192.168.22.33 u
192.168.12.41 w
192.168.0.150 y
[root@m01 ~]# sort -k2 chen.txt    #分隔符默认就是空格
192.168.3.3 a
192.168.3.1 c
192.168.2.20 e
192.168.1.10 f
192.168.2.20 g
192.168.0.152 l
192.168.3.2 n
192.168.2.22 p
192.168.30.2 t
192.168.22.33 u
192.168.12.41 w
192.168.0.150 y
[root@m01 ~]# sort -rk2 chen.txt   # -r代表逆序(默认是升序)【sort -t"" -rk2 chen.txt】
192.168.0.150 y
192.168.12.41 w
192.168.22.33 u
192.168.30.2 t
192.168.2.22 p
192.168.3.2 n
192.168.0.152 l
192.168.2.20 g
192.168.1.10 f

实例2.2 对IP地址分类倒序排序

2.2.1 模拟数据

cat >arp.txt<<EOF
192.168.3.1 00:50:56:C0:00:08
192.168.3.2 00:0C:29:FD:28:FD
192.168.12.41 00:0C:29:21:26:C7
192.168.2.20 00:50:56:27:78:CA
192.168.3.3 00:50:56:29:C4:6B
192.168.2.22 00:40:56:20:6E:AE
192.168.0.152 00:50:56:2E:4A:17
192.168.22.33 00:0C:29:61:1C:36
192.168.1.10 00:40:56:36:BC:B7
192.168.0.150 00:50:56:30:C3:8B
192.168.2.20 01:50:56:C0:00:04
192.168.30.2 00:50:56:23:68:FB
EOF

2.2.2 解法

2.2.2.1 思路

  •  默认按整行排序  

  • -t指定分隔符  

  • -k 1,1用逗号来分隔字段表示第一个字段开始排序到第一个字段结束  

  • -k 1.1,3.3用点分隔字符表示第一个字段的第一个字符开始排序到第三个字段的第三个字符结束

  • sort -t.-k3.1,3.2n -k4.1,4.3rn arp.txt

2.2.2.2 操作过程

[root@m01 ~]# sort -t. -k3.1,3.2n -k4.1,4.3rnarp.txt
# -t指定分隔符是点
# -k3.1,3.2n表示第三个字段的第一个字符开始排序到第二个字符结束因为第三个字段只有两位数最后的一个n代表根据字符串的值来排序一定要加上
# -k4.1,4.3rn表示第四个字段的第一个字符开始排序到第三个字符结束-r代表逆序排序
192.168.0.152 00:50:56:2E:4A:17
192.168.0.150 00:50:56:30:C3:8B
192.168.1.10 00:40:56:36:BC:B7
192.168.2.22 00:40:56:20:6E:AE
192.168.2.20 00:50:56:27:78:CA
192.168.2.20 01:50:56:C0:00:04
192.168.3.3 00:50:56:29:C4:6B
192.168.3.2 00:0C:29:FD:28:FD
192.168.3.1 00:50:56:C0:00:08
192.168.12.41 00:0C:29:21:26:C7
192.168.22.33 00:0C:29:61:1C:36
192.168.30.2 00:50:56:23:68:FB
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章