Linux Sort将文件中的各行进行排序

本文详细介绍了Linux中的sort命令,它是一个强大的数据管理工具,用于对文件内容进行排序。sort命令支持多种选项,如忽略空格、大小写、数字排序、月份排序等,还可以进行多文件合并和按指定字段排序。通过示例展示了如何使用sort进行复杂排序,如按文件的第二个字母或特定字段进行排序。此外,还提到了使用sort与其他命令的组合,如在保持文件原有顺序的情况下检查排序等。
摘要由CSDN通过智能技术生成

sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。

sort可针对文本文件的内容,以行为单位来排序

Sort命令将逐行对文件中的内容进行排序。如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较。

命令格式

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]

[root@master ~]# sort --help
用法:sort [选项]... [文件]...
 或:sort [选项]... --files0-from=F
将所有文件的排序连接写入标准输出。

# 长选项的强制参数也是短选项的强制参数。 
排序选项:
  -b, --ignore-leading-blanks   忽略前导的空白区域
  -d, --dictionary-order        只考虑空白区域和字母字符
  -f, --ignore-case             忽略字母大小写
  -g, --general-numeric-sort  compare according to general numerical value
  -i, --ignore-nonprinting      只考虑可打印字符
  -M, --month-sort            compare (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=KEYDEF          sort via a key; KEYDEF gives location and type
  -m, --merge               merge already sorted files; do not sort
  -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         显示版本信息并退出

KEYDEF为F[.C][OPTS][,F[.C][OPTS]]表示启动和停止位置,其中F是字段号,C是字段中的字符位置;
两者都是原点1,停止位置默认为行尾。如果-t和-b都不生效,则从前面空格的开始计数。
OPTS是一个或多个单字母排序选项[bdfgiMhnRrV],它覆盖该键的全局排序选项。如果没有给出键,则使用整行作为键。

SIZE may be followed by the following multiplicative suffixes:
内存使用率% 1%,b 1、K 1024 (默认),M、G、T、P、E、Z、Y 等依此类推。

如果不指定文件,或者文件为"-",则从标准输入读取数据。

*** 警告 ***
本地环境变量会影响排序结果。
如果希望以字节的自然值获得最传统的排序结果,请设置LC_ALL=C。

常用命令选项

-b 	忽略每行前面开始出的空格字符。
-c 	检查文件是否已经按照顺序排序。如果乱序,则输出第一个乱序的行的相关信息,最后返回1。
-C  检查文件是否已排好序,如果乱序不输出内容,仅返回1。
-d 	排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 	排序时,将小写字母视为大写字母。
-i 	排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 	将几个排序好的文件进行合并。
-M 	将前面3个字母依照月份的缩写进行排序。
-n 	使用『纯数字』进行排序(默认是以文字型态来排序的)。
-u 	意味着是唯一的(unique),输出的结果是去完重了的。
-r 	以相反的顺序来排序(默认升序)。
-o<输出文件> 		  将排序后的结果存入指定的文件。
-t<分隔字符> 		  指定排序时所用的栏位分隔字符。
-k  				 以哪个区间 (field) 来进行排序的意思。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。《起始域为0,即第一个起始栏位置为0(比较古老)》
--help 	  显示帮助。
--version 显示版本信息。
[-k field1[,field2]] 按指定的列进行排序。

参考实例

把排序结果输出到原文件中 (用重定向可就不行了)

[root@localhost ~]# sort -r 1 -o 1
[root@localhost ~]# cat 1
5:a:E
4:b:D
3:c:C
2:d:B
1:e:A
[root@localhost ~]# sort -t : -k 2 1	(不能和-n一起使用)
5:a:E
4:b:D
3:c:C
2:d:B
1:e:A
3:f:F

合并文件会自动排序

[root@localhost ~]# sort 1 2 >3

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

[root@localhost ~]# sort -t ' ' -k 1.2  1.txt 
baidu 11231 666
sohu 1235 304
goole 10000 200
guge 5234 123
释:
“-k 1.2”表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。
其中baidu因为第二个字母是a而名列榜首;sohu和google第二个字符都是o,但是sohu的h在google的o前面,所以sohu排在第二行,google排在第三行;guge就只能排在第四行了。

[root@localhost ~]# sort -t ' ' -k 1.2,1.2 -k 3,3nr 1.txt 
baidu 11231 666
sohu 1235 304
goole 10000 200
guge 5234 123
释:
“-k 1.2,1.2”表示只对第二个字母进行排序。对于员工工资进行排序。
使用“-k 3,3”这是最准确的表述,表示只对本域进行排序,如果省略了后面的3,就变成对第3个域开始到最后一个域位置的内容进行排序。

Once we were also envied ~

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光落入你灰蒙蒙的眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值