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 默认只对相邻的相同行去重
[[email protected] ~]# 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 让重复的行相邻
[[email protected] ~]# 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 统计相同行重复出现的次数
[[email protected] ~]# sortchen.txt|uniq -c #count 210.0.0.7 310.0.0.8 210.0.0.9
~两条命令的效果是一样的
[[email protected] ~]# sort chen.txt |uniq 10.0.0.7 10.0.0.8 10.0.0.9 [[email protected] ~]# 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取域名
[[email protected] ~]# 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统计重复行次数
[[email protected] ~]# 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 逆序排序
[[email protected] ~]# 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 [[email protected] ~]# 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 [[email protected] ~]# 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 取域名
[[email protected] ~]# 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取重复行
[[email protected] ~]# 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 [[email protected] ~]# cut -d/ -f3 chen.log|sort|uniq -c 1chenfage.blog.51cto.com 3edu.51cto.com 1weibo.com 2www.oldboyedu.com 3www.zhibo8.cc [[email protected] ~]# 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 [[email protected] ~]# 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 操作过程
[[email protected] ~]# 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 [[email protected] ~]# 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 [[email protected] ~]# 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 操作过程
[[email protected] ~]# 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
时间: 2024-10-04 15:37:24