前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux 之 sort 命令

Linux 之 sort 命令

作者头像
Dylan Liu
发布2020-05-26 18:15:36
2.3K0
发布2020-05-26 18:15:36
举报
文章被收录于专栏:dylanliudylanliu

简介

sort 是用来排序的,Unix Shell 的传统是对问本行做处理,因此 sort 也是对文本行进行排序,如果需要排序字段,则可以通过指定 -k,-t 等选项来实现。

用法

代码语言:javascript
复制
sort [options]... [file]...

默认排序规则:

  1. 数字开头的行会排在字母开头行之前
  2. 字母序排序(不分大小写)
  3. 小写字母会排在相同的大写字母之前

Options

Flag

描述

-r, --reverse

倒序

-o, --output=FILE

排序结果输出到文件中

-u, --unique

对相同的行进行过滤

-b, --ignore-leading-blanks

忽略首部空格

-d, --directory-order

只考虑空格,字母与数字

-f, --ignore-case

忽略大小写(F means fold)(Fold lower case to upper case characters.)

-i, --ignore-nonprinting

忽略不可打印字母,仅根据可打印字母排序

-n, --numeric-sort

转换为数字排序

-m, --merge

合并已排好序的文件

-t, --field-separator=SEP

使用SEP 而非空格将行切分成字段,与 -k 一起使用

-k, --key=POS1[,POS2]

使排序使用的key 从 POS1(默认1) 开始,POS2(默认行尾) 结束(POS 格式见下)

-R, --random-sort

使用随机哈希排序

-c, --check

只检查文件是否已排序

--help

打印帮助

--version

打印版本

POS 的形式为 F[.C][OPTS], F 是字段序号,C 是字段中字符的位置,默认都为1, 如果没有指定 -t 与 -b ,默认从行首算起。 OPTS 指定字段排序形式,可覆盖外面的排序选项(r,n)

例子

字母序排序文件

sort data

将排序结果保存到单独文件中

sort data > outputsort -o output data

倒序排序

sort -r data

检查文件是否已排序

sort -c data

根据字段进行排序

我们有如下文件 data

代码语言:javascript
复制
1 Alfred
2 Jay
3 Dave
4 Bernad

如果我们直接使用 sort data, 输出不会有任何变化,因为行首是已经排序好的,我们想对人名进行排序,此时就可以使用 -k 选项来指定 sort -k 2 data, 它的输出就变成了

代码语言:javascript
复制
1 Alfred
4 Bernad
3 Dave
2 Jay

指定起始的字段排序

我们有如下data 文件

代码语言:javascript
复制
01 Joe Sr.Designer
02 Marie Jr.Developer
03 Albert Jr.Designer
04 Dave Sr.Developer

我们如果要对职业进行排序可以使用 sort -k 3 data, 但是职业分了等级,我们想将相同职业类型的人放在一起,此时就可以使用 F.C 格式来指定排序字段从第 C 个字母开始排序,忽略前面的字母, sort -k 3.3 data, 如果需要倒序排序可以指定OPTS, sort -k 3.3r data

也可以指定比较的 key 的范围, 上面例子中我们只想比较第三个到第五个字母 sort -k 3.3,3.5 data, 也可以跨字段 sort -k 2.2,3.3 data

多个字段排序

sort -t: -k 2,2n -k 4,4nr data

以冒号分割字段,首先以数字形式比较第2列,如果相同再以数字形式倒序排序第4个字段

删除重复行

sort -u datasort data | uniq 在整行时行为是一致的,不过如果我们使用了 -k 排序字段时, 两者的行为就不一致了, sort 的 -u 比较的是排序的key。

对data 进行sort -k 3.3 -u data 排序

data 数据

代码语言:javascript
复制
01 Joe Sr.Designer
02 Marie Jr.Developer
03 Albert Jr.Designer
04 Dave Sr.Developer

输出结果

代码语言:javascript
复制
01 Joe Sr.Designer
02 Marie Jr.Developer

排序多个文件

sort data1 data2

删除重复 sort -u data1 data2

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 用法
  • Options
  • 例子
    • 字母序排序文件
      • 将排序结果保存到单独文件中
        • 倒序排序
          • 检查文件是否已排序
            • 根据字段进行排序
              • 指定起始的字段排序
                • 多个字段排序
                  • 删除重复行
                    • 排序多个文件
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档