Linux文件系统之排序数据

目录

排序数据(可结合head命令和tail命令)

①sort命令 —— 对文件进行排序

sort实战

②uniq命令 —— 去除重复行

uniq实战

③join命令 —— 对两个文件拼接

join实战

 


 

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

若在file1file2找不到指定的栏位,则在输出中填入-e选项中的字符串

-i

忽略大小写

-o

按照指定的格式来显示结果

-t

设置栏位的分隔符

-v

仅显示文件中没有相同栏位的行

-v 1 表示仅显示file1file2没有相同栏位,file1的行

-v 2 表示仅显示file2file1没有相同栏位,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

file1file2排序后再与file3拼接

>>>join -1 1 -2 1 <(sort file1) <(sort file2) | join - file3

 

 


 

说明:

>>>以上内容是本人学习的总结

>>>如还有错误,请留言,指正

>>>亦可分享自己的想法,互相学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值