sort命令-文本排序

165 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情

一、命令详解

1.1【功能说明】

sort命令将输入的文件内容按照指定的规则进行排序,然后将排序结果输出。不仅如此,还可以依据不同的数据形态来排序,例如数字与文字的排序就不一样。此外排序的字符与语系的编码也有关,因此如果需要排序时建议使用LANG=C来让语系统一,数据排序比较好一些。

1.2【语法格式】

[root@7bfe451a2fe1 ~]# sort --help
Usage: sort [OPTION]... [FILE]...
  or:  sort [OPTION]... --files0-from=F
Write sorted concatenation of all FILE(s) to standard output.

1.3【选项说明】

sort命令的相关选项说明

  • -b 忽略每行开头存在的空白符部分

  • -n 依照数值的大小进行排序,默认是以文本来排序的

  • -r 倒序排列,默认按升序排序

  • -u 就是uniq,去除重复行,相同的数据中,仅出现一行代表

  • -t 指定分隔符,默认是用[tab]键来分隔

  • -k 按指定区间(field)排序

  • -f 忽略大小写的差异,例如 A与a视为编码相同

  • -M 以月份的名字来排序,例如 JAN,DEC等的排序方法

二、使用范例

2.1 基础使用

# 默认以行为单位进行比较,比较原则是从首字符向后,依次按ASCII码值进行比较,输出默认按升序排列
sort a.txt

# 按数字升序排列
sort -n a.txt

# 按数字降序排列
sort -nr a.txt

# 去重
sort -u a.txt

# 按第2列进行排序,此时每列默认以tab分隔
sort -k2 a.txt

# 按第2列进行排序,此时每列以空格分隔
sort -t' ' -k2 a.txt

2.2 将账号进行排序

个人账号都记录在/etc/passwd下,请将账号进行排序

# 默认按第1列以文字形态来排序
sort /etc/passwd

2.3 以第3列排序

假设你有很多账号,而且你想要知道最大的使用者ID目前到哪一号了,使用sort一下就可以知道答案了

# 对账号文件排序,以第3列排序
sort -t':' -k3 -n /etc/passwd

说明:

  1. -t':' 账号里面以冒号分隔字段
  2. -k3 以第3列进行排序
  3. -n 以数字来排序

2.4 对IP列表排序

先按IP地址的第3列排序,再按IP地址的第4列排序

sort -n -t. -k3,3 -k4.1,4.3 ip.txt

说明:

  1. -n 按数字排序
  2. -t. 指定点号作为分隔符
  3. -k3,3 按第3列开始到第3列之间的部分排序
  4. -k4.1,4.3 按第4列第1个字符开始到第4列第3个字符之间的部分排序
  5. 点号连接的是字符,逗号连接的是字段

2.5 先分组再排序

其实就是按2列先后排序

cat a.txt
ab-cd-rc-ab 1.2.3.4
....

sort -t'.' -k1.10,1.11 -k4,4n a.txt

三、扩展知识

3.1 与sort相搭配的指令

uniq
wc

四、命令总结

  • 2022/12/14 简单的命令,简单记