Linux文件排序工具 sort

2025-02-10 10:57:25 454

欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。


Linux 里,有时候需要对文本文件或数据进行排序,sort 命令就是个很趁手的工具。它不仅能按字母序排序,还支持数值、大小写、分隔符、自定义列等各种玩法,直就是排序界的瑞士军刀。

sort 的常用参数

sort 命令有不少参数,先看看常用的几个

短参数

长参数

说明

-n

--number-sort

按数值排序(整数)

-g

--general-numeric-sort

按通用数值排序(支持科学计数法)

-f

--ignore-case

忽略大小写

-k

--key=POS1[,POS2]

指定按哪一列排序

-t

--field-separator=SEP

指定列分隔符

-r

--reverse

降序排序(默认是升序)

-h

--human-numeric-sort

按人类可读的数字格式排序(如 2K、1G)

-u

--unique

去重

-o

--output=FILE

将输出写入文件


sort 命令实战

1. 默认排序(按字母序)

如果不带任何参数,sort 默认是按字母序来排的。

[root@centos ~]$ cat word.txt

one

two

three

four

 

[root@centos ~]$ sort word.txt

four

one

three

two

2. 数字排序(按数值大小)

默认情况下,sort 会把所有内容当作字符串,100 可能会排在 20 前面。如果要按数值排序,需要 -n 参数。

[root@centos ~]$ cat num.txt

100

20

3

 

[root@centos ~]$ sort -n num.txt

3

20

100

3. 按某一列排序

有时候我们需要按照某一列的数据排序,比如 passwd 文件,它用 : 分隔多个字段,我们想按第三列(UID)排序:

[root@centos ~]$ cat passwd

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

sys:x:3:3:sys:/dev:/usr/sbin/nologinsync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/usr/sbin/nologin

man:x:6:12:man:/var/cache/man:/usr/sbin/nologin

lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin

mail:x:8:8:mail:/var/mail:/usr/sbin/nologin

 

[root@centos ~]$ sort -t ':' -k 3 -nr passwd

mail:x:8:8:mail:/var/mail:/usr/sbin/nologin

lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin

man:x:6:12:man:/var/cache/man:/usr/sbin/nologin

games:x:5:60:games:/usr/games:/usr/sbin/nologinsync:x:4:65534:sync:/bin:/bin/sync

sys:x:3:3:sys:/dev:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

解释一下:

· -t ':' :指定 : 作为分隔符

· -k 3 :按第三列排序

· -n :按数值排序

· -r :降序

4. 文件夹大小排序

du -h 可以显示文件夹大小,比如 2K1G 这样的格式。如果想按大小排序,就得用 -h 选项:

[root@centos ~]$ du -h

2.0G    ./test2

4.0K    ./test3

316M    ./test1

3.3G    .

 

[root@centos ~]$ du -h | sort -hr

3.3G    .

2.0G    ./test2

316M    ./test1

4.0K    ./test3

5. 进程内存占用排序

如果想看系统中占用内存最多的进程,可以结合 ps  sort

[root@centos ~]$ ps aux | sort -gr -k 4 | head -n 5

shuanghu  1740 15.7  4.6 1506764 189872 ?      Sl    5月07 142:08 compiz

root      1304  2.1  1.9 338928 80208 tty7     Ssl+  5月07  19:29 /usr/bin/X -core

shuanghu  1933  0.0  1.1 1074520 46708 ?       Sl    5月07   0:00 /usr/lib/evolution/evolution-calendar-factory

shuanghu  1833  0.0  0.8 974900 34468 ?        Sl    5月07   0:01 nautilus -n

shuanghu  2111  0.0  0.6 655712 24920 ?        Sl    5月07   0:16 gnome-terminal

这里的 -k 4 指定按第四列(内存占用)排序,-r 让它按降序排列,head -n 5 取前 5 行。

6. 去重

如果文件里有重复的行,sort -u 直接帮你去掉:

[root@centos ~]$ cat word.txt

one

two

two

three

three

three

four

four

four

 

[root@centos ~]$ sort -u word.txt

four

one

three

two

7. 把排序结果写回文件

平时我们重定向 > 输出到文件,但 sort 不能直接用 sort file.txt > file.txt,这样文件会被清空。要用 -o

[root@centos ~]$ sort word.txt -o word.txt


蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,蓝队云期待与你一起探索。

提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: