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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章