首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >9.Linux文件管理命令---sort按顺序显示文件内容

9.Linux文件管理命令---sort按顺序显示文件内容

原创
作者头像
度假的小鱼
发布2025-01-02 01:12:00
发布2025-01-02 01:12:00
8540
举报
文章被收录于专栏:LinuxLinux

sort按顺序显示文件内容

作用:按顺序显示文件内容。

用法:sort 选项...文件...

排序选项如下

命令

描述

-b,--ignore-leading-blanks

忽略前导的空白区域。

-d,--dictionary-order

只考虑空白区域和字母字符。

-f,--ignore-case

忽略字母大小写。

-g,--general-numeric-sort

按照常规数值排序。

-i,--ignore-nonprinting

只排序可打印字符。

-M,--month-sort

比较(未知)<"一月"<...<"十二月", 在<C-ALL=C 时为(unknown)<'JAN'<...'DEC'。

-h,--human-numeric-sort

使用易读性数字(例如,2K、1G)。

-n,--numeric-sort

根据字符串数值比较。

-R,--random-sort

根据随机 Hash 排序。

--random-source=文件

从指定文件中获得随机字节。

-r,--reverse

逆序输出排序结果。

--sort=WORD

按照 WORD 指定的格式排序。一般数字-g, 高可读性-h,月份-M,数字-n,随机-R,版本-V。

-V,--version-sort

在文本内进行自然版本排序。

其他选项如下

命令

描述

--batch-size=NMERGE:

一次最多合并 NMERGE 个输入; 如果输入更多则使用临时文件。

-c,--check,--check=diagnose-first

检查输入是否已排序,若已有序则不进行操作。

-C,--check=quiet,--check=silent

类似-c,但不报告第一个无序行

--compress-program=程序

使用指定程序压缩临时文件;使用该程序的-d 参数解压缩文件。

--debug

为用于排序的行添加注释,并将可能有问题的用法 输出到标准错误输出。

--files0-from=文件

从指定文件读取以 NUL 终止的名称, 如果该文件被指定为“-”,则从标准输入读文件名。

-k,--key=位置 1[,位置 2]

在位置 1 开始一个 key,在位置 2 终止(默认为行尾)。

-m,--merge

合并已排序的文件,不再进行排序。

-o,--output=文件

将结果写入到文件而非标准输出。

-s,--stable

禁用 last-resort 算法。

-S,--buffer-size=大小

指定主内存缓存大小。

-t,--field-separator=分隔符

使用指定的分隔符代替非空格到空格的转换。

-T,--temporary-directory=目录

使用指定目录而非$TMPDIR 或/tmp 作为 临时目录,可用多个选项指定多个目录。

--parallel=N

将同时运行的排序数改变为 N。

-u,--unique

配合-c,严格校验排序;不配合-c,则只输出一次排序结果。

-z,--zero-terminated

以 0 字节而非新行作为行尾标志。

--help

显示此帮助信息并退出。

--version

显示版本信息并退出。

案例练习

(1)对密码文件进行排序。

代码语言:shell
复制
# sort /etc/passwd > /etc/passwd-new 
# mv /etc/passwd-new /etc/passwd

注意

不能将输出直接发送到输入文件,因为这会破坏输入文件。这就是为何需要将它发送到临时文件中,然后将该文件重命名为/etc/passwd 的原因。如果想倒转排序的次序,则应当使用-r 选项。还可以用-u 选项来禁止打印相同的行。

(2)用“sort -m”排序合并多个日志。

许多大型的 Web 服务使用 DNS 轮循来实现负载均衡。对于使用多个同样角色的服务器做前台的 Web 服务,多个服务器的分布使得日志的分析统计也变得有些麻烦。可以使用 sort 合并, 示例代码如下:

代码语言:shell
复制
sort -m -t " " -k 4 -o log_all log1 log2 log3

(3)sort 的-k 选项的使用。

从公司英文名称的第二个字母开始进行排序。

代码语言:shell
复制
$ sort -t ' ' -k 1.2 facebook.txt 
baidu 100 5000 
sohu 100 4500 
google 110 5000 
guge 50 3000 

使用了-k 1.2,表示对从第一个域的第二个字符开始到本域的最后一个字符为止的字符串 进行排序。读者会发现 baidu 因为第二个字母是 a 而名列榜首;sohu 和 google 第二个字符都是 o,但 sohu 的 h 在 google 的 o 前面,所以二者分别排在第二和第三;guge 只能屈居第四了。只 针对公司英文名称的第二个字母进行排序,如果相同则按照员工工资进行降序排序。

代码语言:shell
复制
$ sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt 
baidu 100 5000 
google 110 5000 
sohu 100 4500 
guge 50 3000 

由于只对第二个字母进行排序,所以使用了-k 1.2,1.2 的表示方式,表示我们“只”对第二 个字母进行排序(为什么使用-k 1.2 不行?当然不行,因为省略了 End 部分,这就意味着将对 从第二个字母起到本域最后一个字符为止的字符串进行排序)。对员工工资进行排序,也使用 了-k 3,3,这是最准确的表述,表示“只”对本域进行排序,因为如果省略了后面的 3,就变成 了“对从第三个域开始到最后一个域位置的内容进行排序”了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sort按顺序显示文件内容
    • 排序选项如下
    • 其他选项如下
    • 案例练习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档