通过使用 sort 和

tsort,而不是采取使用 Perl 或 Awk 的较复杂的解决方案,可以节省时间,同时还能避免令人头疼的问题。Jacek

Artymiak 将向您说明如何做到这一点。

尽管可以用

Perl 或 Awk 编写高级排序应用程序,但并非总是有此必要,而且这样的工作也常常令人感到头疼。使用 sort

命令,您同样可以实现您所需的大多数功能,而且更容易,它可以对多个文件中的行进行排序、合并文件甚至可以查看是否有必要对它们进行排序。您可以指定排序

键(用于比较的行中的一部分),也可不指定,后一种情况下 sort 就比较所有行。

因此,如果您想对密码文件进行排序,就可以使用下列命令(请注意,您不能将输出直接发送到输入文件,因为这会破坏输入文件。这就是为何您需要将它发送到临时文件中,然后将该文件重命名为

/etc/passwd 的原因,如下所示)。

清单 1.

简单排序

$ su -

# sort /etc/passwd > /etc/passwd-new

# mv /etc/passwd-new /etc/passwd

如果您想倒转排序的次序,则应当使用 -r 选项。您还可以用 -u

选项来禁止打印相同的行。

sort

的一个非常实用的特性是它用字段键进行排序的能力。字段是一个文本字符串,通过某个字符与其它字段分隔开。例如,/etc/passwd

中的字段是用冒号( : )分隔的。因此,如果愿意的话,您可以按照用户标识、组标识、注释字段、主目录或 shell 对

/etc/passwd 进行排序。要做到这一点,请使用 -t

选项,其后跟着用作分隔符的字符,接着是用作排序键的字段编号,再跟作为键的最后一个字段的编号;例如, sort -t : -k 5,5

/etc/passwd 按照注释字段对密码文件进行排序,该字段中存储了完整的用户名(如“John Smith”)。而 sort -t

: -k 3,4 /etc/passwd 同时使用用户标识和组标识对同一个文件进行排序。如果您省略了第二个数字,那么 sort

会假定键是从给定的字段开始,一直到每一行的末尾。动手试一试,并观察其中的区别(当数字排序看上去有错时,请添加 -g

选项)。

还要注意的是,空白过渡是缺省的分隔符,因此,如果字段已经用空白字符分隔了,那么您可以省略分隔符,只使用

-t (另注:字段的编号是从 1 开始的)。

为了更好地进行控制,您可以使用键和偏移量。偏移量是用点与键相分隔的,比如在 -k 1.3,5.7

中,表示排序键应当从第 1 个字段的第 3 个字符开始,到第 5 个字段的第 7 个字符结束(偏移量也是从 1

开始编号的)。何时会用得着偏移量呢?嗯,我时常用它来对 Apache

日志进行排序;键和偏移量表示法让我跳过了日期字段。

另一个要关注的选项是 -b ,它告知 sort

忽略空白字符(空格、跳格等等)并将行中的第一个非空白字符当做是排序键的开始。还有,如果您使用该选项,那么将从第一个非空白字符开始计算偏移量(当字

段分隔符不是空白字符,且字段可能包含以空白字符开头的字符串时,这非常有用)。

可以用下面这些选项来进一步修改排序算法: -d (只将字母、数字和空白用作排序键)、 -f

(关闭大小写区分,认为小写和大写字符是一样的)、 -i (忽略非打印的 ASCII 字符)、 -M

(使用三个字母的月份名称缩写:JAN、FEB、MAR … 来对行进行排序)和 -n (只用数字、-

和逗号或另外一个千位分隔符对行进行排序)。这些选项以及 -b 和 -r

选项可以用作键编号的一部分,在这种情况下,它们只适用于该键而非全局,其作用就跟在键定义外使用它时一样。

以键编号的用法为例,请考虑:

sort -t: -k 4g,4 -k 3gr,3 /etc/passwd

这条命令将按照组标识对 passwd 文件进行排序,而在组内按照用户标识进行逆向排序。但是这并非

sort 的全部能力。如果您所使用的键不能用来确定哪一行是在先,那么它也可以解决这类平局问题。增加一个解决平局问题的提示,请添加另一个

-k 选项,让它跟在字段和(可选的)偏移量后面,使用与前面用于定义键相同的表示法;例如, sort -k 3.4,4.5 -k

7.3,9.4 /etc/passwd 对行进行排序时,使用从第 3 个键的第 4 个字符开始到第 4 个键的第 5

个字符结束的键,然后再采用从第 7 个字段的第 3 个字符到第 9 个字段的第 4

个字符结束的键来解决上述难题。

最后一组选项处理输入、输出和临时文件。例如, -c 选项,当它用于 sort -c

< file

中时,它检查输入文件是否已进行了排序(您也可以使用其它选项),如果已进行了排序,则报告一个错误。这样,在处理可能需要花很长时间进行排序的大型文件

之前,可以很方便地对其进行检查。当您将 -u 选项和 -c

选项一起使用时,会被解释为一个请求:检查输入文件中不存在两个相同的行。

当您处理大型文件时还有一个很重要的 -T 选项,它用于为临时文件(这些临时文件在 sort

完成工作之后会被除去)指定其它目录,而不是缺省的 /tmp 目录。

您可以使用

sort 来同时处理多个文件,这样做的方式基本上有两种:首先可以使用 cat 来并置它们,如下所示:

cat file1 file2 file3 | sort > outfile

或者,可以使用下面这个命令:

sort -m file1 file2 file3 > outfile

第二种情况有个条件:在将所有输入文件一起进行 sort -m

之前,每个文件都必须经过排序。这看起来似乎是个不必要的负担,但事实上这加快了工作速度并节约了宝贵的系统资源。对了,别忘了 -m

选项。在这里您可以使用 -u 选项来禁止打印相同的行。

如果需要某种更深奥的排序方法,您可能要查看 tsort

命令,该命令对文件执行拓扑排序。拓扑排序和标准 sort 之间的差别如清单 2 所示(您可以从 参考资料下载

happybirthday.txt)。

清单 2.

拓扑排序和标准排序之间的差别

$ cat happybirthday.txt

Happy Birthday to You!

Happy Birthday to You!

Happy Birthday Dear Tux!

Happy Birthday to You!

$ sort happybirthday.txt

Happy Birthday Dear Tux!

Happy Birthday to You!

Happy Birthday to You!

Happy Birthday to You!

>$ tsort happybirthday.txt

Dear

Happy

to

Tux!

Birthday

You!

当然,对于

tsort 的使用来说,这并非一个非常有用的演示,只是举例说明了这两个命令输出的不同。 tsort

通常用于解决一种逻辑问题,即必须通过观察到的部分次序预测出整个次序;例如(来自 tsort 信息页中):

tsort <

a b c

d

e f

b c d e

EOF

会产生这样的输出:

a

b

c

d

e

f

(T115)

发布时间:2006.12.19

05:02 来源:www-128.ibm.com 作者:jacek

linux的sort如何对时间排序,Linux中用Sort和Tsort对文件进行排序相关推荐

  1. Linux执行yum不显示时间图形,Linux停的yum命令详解(朝花夕拾)

    yum是干什么的使用redhat,fedora的linuxer肯定都为rpm著名的dependency hell而头疼(这也是所有基于rpm发行版都有的问题).foo is needed by bar ...

  2. php对文件排序,php – 使用filemtime()和usort()对文件进行排序会产生随机结果

    我正在使用usort()和filemtime()按修改日期对文件进行排序,但它会以错误的顺序随机返回文件.我想我错过了一些非常简单但我无法弄明白的东西. usort($user_files, func ...

  3. linux 截取某一段时间的日志,存储到另一个文件中

    使用sed命令提取指定时间段日志内容 sed -n '/2021-07-17 03:53:23.866076/,/2021-07-17 03:53:26.912142/p' mission_contr ...

  4. Linux执行yum不显示时间图形,Linux命令yum

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora.RedHat.ContOS以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务 ...

  5. linux让脚本在指定时间运行程序,如何限制Linux命令程序运行的时间

    1. 前言 本文主要讲解如何限制Linux命令程序运行的时间. Linux提供了大量的命令,每个命令都是唯一的,并且在特定的情况下使用.Linux的目标是帮助您尽可能地高效工作.Linux命令的一个属 ...

  6. linux sort 时间排序,linux sort多字段排序实例解析

    本文研究的主要是linux sort多字段排序,具体介绍如下. Linux多数发行版自带的sort程序,非常强大,在此只说多字段排序 sort 有个参数-k,可以指定字段,有比较复杂的语法,不在文本范 ...

  7. linux下sort命令使用详解---linux将文本文件内容加以排序命令

    转载自:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274592.html linux下sort命令使用详解---linux将文本文件内容加以排 ...

  8. linux命令怎么查看文件时间排序,linux中ls命令按照文件大小排...-ls命令按大小与时间排序文件...-ls按时间排序输出文件列表的实例分析_169IT.COM...

    ls命令可以按照文件大小进行输出排序. 代码示例: man ls -S sort  by file size 用法: ls -Sl 这是按照由大到小排序,如果想要反过来,从小到大,那么用: ls -S ...

  9. linux sort命令 排序,Linux sort排序方法

    在文件的操作过程中,因为文件过多,往往需要进行一下排序,排序方法也就是从小到大排序或者从大到小排序.比如我们从nginx日志中需要找到访问量最长的url,那就需要对请求时间进行一个排序,根据请求时间长 ...

最新文章

  1. loadrunner结果图分析
  2. python表白-520使用Python实现“我爱你”表白
  3. C/C++ 实现的websocket客户端
  4. 电脑不能打字_宝妈、学生、上班族手机兼职——打字录入
  5. ssh密码长度漏洞java_Linux中 OpenSSH 输入验证错误漏洞(CVE-2019-16905) 修复解决方案...
  6. php与JAVA的RSA加密互通
  7. Android 调整屏幕分辩率
  8. BZOJ3236[Ahoi2013]作业——莫队+树状数组/莫队+分块
  9. OptionRoom将在Bounce授权拍卖平台进行Polkadot IDO
  10. 酒后谈IT,那些术语大妈都能秒懂!
  11. Preparing Your Data for Use with robot_localization 准备 robot_localization 数据
  12. 思维导图使用技巧:手把手教你怎么画思维导图 #CSDN博文精选# #系统化学习# #IT技术# #知识图谱#
  13. FF7 中的最大伤害分析
  14. j1900安装linux系统,入手J1900改MAC洗白黑群辉的历程
  15. arduino智能跟随小车
  16. emacs 自带的简单入门教程(TUTORIAL)
  17. plc远程监控.plc远程通讯.PLC远程控制
  18. 成都学python哪个机构好_成都学python人工智能哪个机构好
  19. 江苏科技大学 计算机复试内容,2020年江苏科技大学电子信息学院考研复试科目及参考书...
  20. 光模块SFF协议的下载地址

热门文章

  1. 弄了个调试呼叫中心用的小机器
  2. 庆祝法国队夺冠:用Python放一场烟花秀
  3. SSH远程访问及控制
  4. hive数据仓库摘录和总结
  5. 猫猫学IOS(四十)UI之核心动画_抖动效果_CAKeyframeAnimation
  6. Lync Server 2010移动功能部署PART B:外部篇
  7. 技术方案——可控组播
  8. OpenGL中的混合(Blending)
  9. tomcat乱码怎么解决_PDF转word乱码怎么办?解决方法如此简单!
  10. python读取文件夹图片_读取文件夹里的图片,并且与标签对应