linux中如何对一个文本内容进行排序呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中如何对一个文本内容进行排序呢相关的知识,希望对你有一定的参考价值。

参考技术A 功能说明:将文本文件内容加以排序。
语  法:sort
[-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
补充说明:sort可针对文本文件的内容,以行为单位来排序。
参  数:
-b
忽略每行前面开始出的空格字符。
-c
检查文件是否已经按照顺序排序。
-d
排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f
排序时,将小写字母视为大写字母。
-i
排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m
将几个排序好的文件进行合并。
-M
将前面3个字母依照月份的缩写进行排序。
-n
依照数值的大小排序。
-o<输出文件>
将排序后的结果存入指定的文件。
-r
以相反的顺序来排序。
-t<分隔字符>
指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位>
以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
--help
显示帮助。
--version
显示版本信息
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面通过几个例子来讲述Sort的使用。
用Sort命令对text文件中各行排序后输出其结果。请注意,在原文件的第二、三行上的第一个单词完全相同,该命令将从它们的第二个单词vegetables与fruit的首字符处继续进行比较。
$
cat
text
vegetable
soup
fresh
vegetables
fresh
fruit
lowfat
milk
$
Sort
text
fresh
fruit
fresh
vegetables
lowfat
milk
vegetable
soup
用户可以保存排序后的文件内容,或把排序后的文件内容输出至打印机。下例中用户把排序后的文件内容保存到名为result的文件中。
$
Sort
text>result
以第2个字段作为排序关键字对文件example的内容进行排序。
$
Sort
+1-2
example
对于file1和file2文件内容反向排序,结果放在outfile中,利用第2个字段的第一个字符作为排序关键字。
$
Sort
-r
-o
outfile
+1.0
-1.1
example
Sort排序常用于在管道中与其他命令连用,组合完成比较复杂的功能,如利用管道将当前工作目录中的文件送给Sort进行排序,排序关键字是第6个至第8个字段。
$
ls
-
l
|
Sort
+5
-
7
$
ps
-e
-o
"
comm
pid
time"|Sort
-d
//按照command的首字母的字母顺序排序
Sort命令也可以对标准输入进行操作。例如,如果您想把几个文件文本行合并,并对合并后的文本行进行排序,您可以首先用命令cat把多个文件合
并,然后用管道操作把合并后的文本行输入给命令Sort,Sort命令将输出这些合并及排序后的文本行。在下面的例子中,文件veglist与文件
fruitlist的文本行经过合并与排序后被保存到文件clist中。
$
cat
veglist
fruitlist
|
Sort
>
clist

一个Linux命令帮你对文本排序

来自:编程珠玑(微信号:shouwangxiansheng)

前言

在Linux下,有时候需要对文本内容进行排序,例如按照字典顺序排序,按照数字排序或者按照特定列排序等等。今天我们就借助一个命令-sort来满足我们对文本排序的需求。

按照字典顺序排序

假如有文本内容test1.txt如下(偷偷问一句:你在使用哪个linux发行版?):

Debian 
Gentoo
Gentoo
CentOS
Fedora
ubuntu
Kali
redhat
Arch
OpenSuse

现在要对文本内容按照字典升序排序,只需使用下面的命令即可:

sort test1.txt

输出结果如下:

Arch
CentOS
Debian 
Fedora
Gentoo
Gentoo
Kali
OpenSuse
redhat
ubuntu

可以看到输出结果按照字典顺序的升序进行了排序。如果需要降序输出只需要使用-r参数,如:

sort -r test1.txt

输出结果如下:

ubuntu
redhat
OpenSuse
Kali
Gentoo
Gentoo
Fedora
Debian 
CentOS
Arch

去除重复行

我们看到前面有两行的内容是重复的,即Gentoo行,使用-u参数可以去掉重复的行:

sort -u test1.txt

输出结果如下:

Arch
CentOS
Debian 
Fedora
Gentoo
Kali
OpenSuse
redhat
ubuntu

在输出结果中,重复的Gentoo行被去掉了。

按照数字排序

假设有文本内容test2.txt如下,第一列为市值排名,第二列为公司名称,第三列为公司创建时间:

2 google 1998
10 icbc  1984
5 tencent 1998
1 apple 1976
16 samsung 1938

按照前面的介绍,我们对内容排序结果如下:

10 icbc  1984
16 samsung 1938
1 apple 1976
2 google 1998
5 tencent 1998

这不对啊,16怎么在1前面呢?很显然这是因为前面的排序都是字典排序,而我们实际需要的是按照数值大小进行排序,因此需要用到-n参数:

sort -n test2.txt

最后的输出结果如下:

1 apple 1976
2 google 1998
5 tencent 1998
10 icbc  1984
16 samsung 1938

可以看到,最终结果按照市值排名打印出来。

按照指定列排序

假如我们不想按照市值排名排序,而是按照公司名称排序呢?那么就需要按照指定列排序了。这里需要用到两个参数:

  • -t 指定分隔符,未指定时,默认分隔符为空白

  • -k 指定列排序

需要按照第二列,公司名称排序,因此排序命令如下:

sort -k 2 test2.txt #默认以空白作为分隔符
sort -k 2 -t ' ' sort2.txt #以空格为分隔符

结果如下:

1 apple 1976
2 google 1998
10 icbc  1984
16 samsung 1938
5 tencent 1998

可以看到,最后会以第二列,即公司名称为依据排序输出。

以多列为依据排序

假设我们按照公司创建年份排序,如果年份相同,则按照公司名称排序,即分别以第三列,第二列为依据排序:

sort -n -k 3 -k 2 test2.txt

输出结果如下:

16 samsung 1938
1 apple 1976
10 icbc  1984
2 google 1998
5 tencent 1998

如果要按照年份降序排序,则只需加-r参数即可:

sort -n -k 3r -k 2 test2.txt

输出结果如下:

2 google 1998
5 tencent 1998
10 icbc  1984
1 apple 1976
16 samsung 1938

按照特定列的特定字符排序

假如我们想要按照公司名称的第二至第三个字符排序,可以使用下面的方式:

sort -t ' ' -k 2.2,2.3 test2.txt

输出结果如下:

16 samsung 1938
10 icbc  1984
5 tencent 1998
2 google 1998
1 apple 1976

-k 2.2,2.3指定了按照第二列排序,并且是第二列的第二个字符开始,到第三个字符结束。可以看到,由于samsung的第二个字母是a而排在开头。如果是以第二个字符开始,到最后一个字符结束,则用下面的命令即可:

sort -t ' ' -k 2.2 test2.txt

保存排序结果

前面的排序命令仅仅是将排序结果打印到控制台,并没有修改源文件,如果想要将排序结果保存在文件中,需要使用-o参数:

sort test1.txt -o test1.txt #直接修改源文件
sort test1.txt -o output.txt #输出到另外一个文件
sort test1.txt > output.txt #重定向到output.txt

如果想将排序结果保存在源文件中,只能使用-o参数,而如果是其他文件,既可以使用-o参数,也可以使用重定向。

检查是否乱序

sort同样也可以用来检查文本内容是否已经是排好序的。
例如:

sort -c test1.txt #打印结果,并告知无序开始的行数
sort -C test1.txt #不打印结果,但是命令的返回结果为1

合并已排序的文本

可以使用-m选项来合并已经排好序的文本,但不会重新排序。
例如:

sort -m file1 file2

总结

以上就是使用sort命令对文本进行排序的常见使用方法,更多内容可使用man命令进行查看。常见选项如下:

  • -r 按照降序排列

  • -n 按照数值大小排列

  • -k 按照指定列排列

  • -t 指定分隔符

  • -u 去重

  • -o 输出结果到文件中


  


●编号638,输入编号直达本文

●输入m获取文章目录

推荐↓↓↓

运维

更多推荐

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。

以上是关于linux中如何对一个文本内容进行排序呢的主要内容,如果未能解决你的问题,请参考以下文章

linux中如何对一个文本内容进行排序呢

linux:如何对文本里的相同行进行去重

一个Linux命令帮你对文本排序

一个Linux命令帮你对文本排序

Linux文本处理命令的Sort命令

Linux下常用文本处理命令