目录
排序数据(可结合head命令和tail命令)
①sort命令 —— 对文件进行排序
>>>默认情况下,字段(即每一列)之间用空格或tab键作分隔符
>>>排序的对象是行,对比的依据是列(从左至右以字符为单位进行比较)
>>>排默认序以升序输出
>>>在第x列数值排序基础上进行第y列排序: -kxn,y
选项 | 说明 |
-b | 忽略每一行行首的空格,从第一个可见字符开始比较 |
-c | 检查文件是否排好序,如果乱序,输出文件第一个没有成功排序的行的信息 |
-k | 指定排序的列数 |
-f | 忽略字母大小写,将小写字母转化为大写字母进行排序 |
-r | 实现降序排序 |
-u | 在输出的行中去除重复的行 |
-o | 将结果重定向到原文件中 |
-n | 以数值来排序 |
-t | 设置分隔符(默认是空格) |
-M | 以月份来排序,针对有时间戳格式的日志文件 |
sort实战
(1)去除文件中重复的行,并将结果以降序覆盖到原文件
>>>sort -u -r file -o file
(2)对/etc/passwd文件,以 ":" 作为分隔符,并对第三列以数值进行倒序排序
>>>sort -n -r -t : -k3 /etc/passwd
(3)对文件第二列以数值进行降序排序,如有相同值,对第三列以数值升序排序
>>>sort -k2nr,3n file
②uniq命令 —— 去除重复行
>>>针对相邻的重复行(uniq命令对不相邻的重复行不起作用,所以需要和sort命令结合使用)
>>>如果想要统计一个文件中某个IP重复的次数,需要先对文件进行sort排序,再进行统计
选项 | 说明 |
-c | 在输出行前面显示该行重复行出现的次数 |
-i | 忽略大小写 |
-d | 仅显示重复的行,重复行只显示一行 |
-D | 仅显示重复的行,重复的行都显示出来 |
-u | 去除重复的行(包括不相邻的行,只要重复,就会把重复的行去除) |
uniq实战
统计并输出一个文件重复次数最多那三行的内容
>>>cat file | sort | uniq -c | sort -k 1 -n -r | head -3
③join命令 —— 对两个文件拼接
>>>join命令只能对两个文件进行拼接
>>>将两个文件,指定栏位内容相同的行拼接在一起(必须有相同的连接字段)
>>>语法结构: join 【option】 file1 file2
选项 | 说明 |
-a FileNum | 表示第几个文件,-a1表示第一个文件,-a2表示第二个文件 |
-e EMPTY | 若在file1和file2找不到指定的栏位,则在输出中填入-e选项中的字符串 |
-i | 忽略大小写 |
-o | 按照指定的格式来显示结果 |
-t | 设置栏位的分隔符 |
-v | 仅显示文件中没有相同栏位的行 -v 1 表示仅显示file1与file2没有相同栏位,file1的行 -v 2 表示仅显示file2与file1没有相同栏位,file2的行 |
-1 field | 指定连接file1的栏位 |
-2 field | 指定连接file2的栏位 |
-j field | 等价于-1 field -2 field |
join实战
(1)输出第一个文件的第一个字段、第二个字段和第二个文件的第二个字段
>>>join -o 1.1 1.2 2.2 file1 file2
(2)显示第一个文件所有行数,没有匹配到的行显示空白
>>>join -a1 file1 file2
显示两个文件所有的行数,没有匹配到的行显示空白
>>>join -a1 -a2 file1 file2
(3)实现/etc/passwd的第一列第三列和/etc/shadow第三列的拼接
>>>join -t : -o 1.1 1.3 2.3 /etc/passwd /etc/shadow
注意:/etc/passwd和/etc/shadow的分隔符是 : ,所以需要使用-t选项指定分隔符为 :
(4)实现三个文件的拼接
>>>join file1 file2 | join - file3
>>>join <(join file1 file2) file3
对file1和file2排序后再与file3拼接
>>>join -1 1 -2 1 <(sort file1) <(sort file2) | join - file3
说明:
>>>以上内容是本人学习的总结
>>>如还有错误,请留言,指正
>>>亦可分享自己的想法,互相学习