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