linux命令---sort

说明:基于前几篇文章在写选项的时候带上了长选项格式,排版比较混乱,从本篇文章开始将不再介绍长格式选项,想了解的请对照man自行对应。

概述

  sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。sort命令既可以从特定的文件,也可以从stdin中获取输入。
  sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出


本文基于sort版本:GNU coreutils 8.4


语法

sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F

选项

OptionsDetails
-b忽略排序字段或关键字中开头的空格
-d在关键字中只考虑[a-zA-Z0-9]字符. 即处理英文字母、数字及空格字符外,忽略其他的字符
-f将关键字中的小写字母折合成大写字母.
-g按照通常的数字值顺序作比较,暗含-b
-i在关键字中只考虑[\040-\0176]字符.即除了040至176之间的ASCII字符外,忽略其他的字符
-M按(未知的)<JAN'<...<DEC’的顺序比较,暗含-b;即将前面3个字母依照月份的缩写进行排序
-h按自然语言进行比较如2k,1g
-n按照字符串的数值顺序比较,暗含-b
-R通过关键字随机hash排序
-r颠倒比较的结果.
-l按照当前环境排序.
-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
-C会检查文件是否已排好序,如果乱序,不输出内容—第一次乱序的内容,仅返回1
-k POS1[,POS2]从关键字POS1开始,到POS2结束. 字段数和字符偏移量都从1开始计数(与基于零的+POS格式作比较)
-m合并已经排序好的文件,不排序.
-o FILE将结果写入FILE而不是标准输出.
-s通过屏蔽最后的再分类比较来稳定排序.
-t SEP指定排序时所用的栏位分隔字符。使用SEP来替代空格的转换non-.
-T DIRECTORY使用DIRECTORY作为临时文件,而不是$TMPDIR或者/tmp
-u如果有-c,则按严格的顺序进行检查; 如果有-m,则只输出相等顺序的第一个.
-z以0字节结束行,而不是使用换行符,这是为了找到-print0
–help显示帮助并退出.
–version输出版本信息并退出.

POS为F[.C][OPTS],这里的F指的是字段数,而C为字段中的字符位置,这在-k中是从开始计数的,而在过时的格式中是从零开始的.OPTS可由一个或多个Mbdfinr组成;这有效地屏蔽了对于那个关键字的全局-Mbdfinr设置.如果没有指定关键字,则使用整行作为关键字.如果没有FILE,或者FILE是-,则从标准输入读取

实例

准备文本文件

[root@wmstianjin16172 ~]# cat testSort.txt 
name    age dept    mark
yl      30  1   000
sl      25  2   130
ag      35  5   134
uq      26  3   141
 uq      26  3   141
ag      35  5   134

uq      26  3   141

Uq      24  3   141

1、不使用任何参数对文件按行进行ASCII码排序

[root@wmstianjin16172 ~]# sort testSort.txt


ag      35  5   134
ag      35  5   134
name    age dept    mark
sl      25  2   130
Uq      24  3   141
 uq      26  3   141
uq      26  3   141
uq      26  3   141
yl      30  1   000

2、使用-k选项对第二列进行排序

[root@wmstianjin16172 ~]# sort -k2 testSort.txt


Uq      24  3   141
sl      25  2   130
 uq      26  3   141
uq      26  3   141
uq      26  3   141
yl      30  1   000
ag      35  5   134
ag      35  5   134
name    age dept    mark

3、使用-n选项,对数字进行排序

[root@wmstianjin16172 ~]# sort -nk2 testSort.txt


name    age dept    mark
Uq      24  3   141
sl      25  2   130
 uq      26  3   141
uq      26  3   141
uq      26  3   141
yl      30  1   000
ag      35  5   134
ag      35  5   134

4、使用-r选项倒序排列

[root@wmstianjin16172 ~]# sort -rnk2 testSort.txt 
ag      35  5   134
ag      35  5   134
yl      30  1   000
uq      26  3   141
uq      26  3   141
 uq      26  3   141
sl      25  2   130
name    age dept    mark

5、使用-u选项去重

[root@wmstianjin16172 ~]# sort -unk2 testSort.txt
name    age dept    mark
Uq      24  3   141
sl      25  2   130
uq      26  3   141
yl      30  1   000
ag      35  5   134

当然这里指的是第二列的值重复
6、使用-t选项
用字符’2’替换默认的分隔符TAB

[root@wmstianjin16172 ~]# sort -t2 -nk2 testSort.txt


ag      35  5   134
ag      35  5   134
name    age dept    mark
yl      30  1   000
Uq      24  3   141
sl      25  2   130
 uq      26  3   141
uq      26  3   141
uq      26  3   141

7、混合选项-t指定分割符,对2,3字段域进行数字排列,对1字段域进行数值排列

[root@wmstianjin16172 ~]# sort -t"2" -nk2,3 -k1 testSort.txt


ag      35  5   134
ag      35  5   134
name    age dept    mark
yl      30  1   000
Uq      24  3   141
sl      25  2   130
 uq      26  3   141
uq      26  3   141
uq      26  3   141

8、使用-o选项

[root@wmstianjin16172 ~]# sort -t, -nk1 testSort.txt -o sortRes.txt
[root@wmstianjin16172 ~]# cat sortRes.txt 


ag      35  5   134
ag      35  5   134
name    age dept    mark
sl      25  2   130
Uq      24  3   141
 uq      26  3   141
uq      26  3   141
uq      26  3   141
yl      30  1   000

9、使用-R选项

[root@wmstianjin16172 ~]# sort -R testSort.txt 
 uq      26  3   141
sl      25  2   130
Uq      24  3   141
name    age dept    mark


uq      26  3   141
uq      26  3   141
yl      30  1   000
ag      35  5   134
ag      35  5   134

每次都不一样,不知道它的用处是什么,打乱重新组织?
10、使用-c/-C选项

[root@wmstianjin16172 ~]# sort -C testSort.txt 
[root@wmstianjin16172 ~]# echo $?
1
[root@wmstianjin16172 ~]# sort -c testSort.txt
sort: testSort.txt:3: disorder: sl      25  2   130
[root@wmstianjin16172 ~]# echo $?
1

11、-b、-f、-M等就不在此举例了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值