使用 Unix 排序对多个键进行排序
- 2024-10-12 10:28:00
- admin 原创
- 99
问题描述:
我有一些可能需要按 1-n 个键排序的大型文件。其中一些键可能是数字,而另一些可能不是。这是一个固定宽度的列式文件,因此没有分隔符。
有没有好的方法可以用 Unix 排序来实现这一点?使用一个键,就像使用“-n”一样简单。我读过手册页,并在 Google 上搜索过,但没有找到一个很好的例子。我该如何实现这一点?
注意:由于文件大小问题,我已排除了 Perl。这是最后的选择。
解决方案 1:
但要小心:
如果您希望主要按字段 3 对文件进行排序,其次按字段 2 对文件进行排序,则需要这样做:
sort -k 3,3 -k 2,2 < inputfile
不是这个: sort -k 3 -k 2 < inputfile
它根据从字段 3 的开头到行尾的字符串对文件进行排序(这可能是唯一的)。
-k, --key=POS1[,POS2] start a key at POS1 (origin 1), end it at POS2
(default end of line)
解决方案 2:
-k 选项就是您想要的。
-k 1.4,1.5n -k 1.14,1.15n
将使用第一个字段中的字符位置 4-5(对于固定宽度,它们都是一个字段)并按数字顺序排序作为第一个键。
第二个键也应该是第一个字段中的字符 14-15。
(编辑)
示例(我手边只有 DOS/cygwin):
dir | cygwininsort.exe -k 1.4,1.5n -k 1.40,1.60r
对于数据:
12/10/2008 01:10 PM 1,564,990 outfile.txt
按月份数(位置 4-5)对目录列表进行数字排序,然后按文件名(位置 40-60)反向排序。由于没有标签,因此所有字段 1 都进行排序。
解决方案 3:
使用-k
选项 (或--key=POS1[,POS2]
)。它可以出现多次,每个键可以有全局选项(例如n
数字排序)
解决方案 4:
以下是按数字和字典顺序对 csv 文件中的各个列进行排序的方法,第 5 列及之后的列按字典顺序排列
~/test>sort -t, -k1,1n -k2,2n -k3,3d -k4,4n -k5d sort.csv
1,10,b,22,Ga
2,2,b,20,F
2,2,b,22,Ga
2,2,c,19,Ga
2,2,c,19,Gb,hi
2,2,c,19,Gb,hj
2,3,a,9,C
~/test>cat sort.csv
2,3,a,9,C
2,2,b,20,F
2,2,c,19,Gb,hj
2,2,c,19,Gb,hi
2,2,c,19,Ga
2,2,b,22,Ga
1,10,b,22,Ga
注意 -k1,1n 表示从第 1 列开始到第 1 列结束的数字。如果我按照下面的方法操作,它会将第 1 列和第 2 列连接起来,使 1,10 排序为 110
~/test>sort -t, -k1,2n -k3,3 -k4,4n -k5d sort.csv
2,2,b,20,F
2,2,b,22,Ga
2,2,c,19,Ga
2,2,c,19,Gb,hi
2,2,c,19,Gb,hj
2,3,a,9,C
1,10,b,22,Ga
解决方案 5:
我相信你的情况是这样的
sort -t@ -k1.1,1.4 -k1.5,1.7 ... <inputfile
会更好地工作。@ 是字段分隔符,确保它是一个在任何地方都不会出现的字符。那么您的输入将被视为由一列组成。
编辑:clintp 显然已经给出了类似的答案,抱歉。正如他指出的那样,可以将标志“n”和“r”添加到每个 -k.... 选项中。
解决方案 6:
请注意,可能还需要使用开关来稳定排序-s
,以便排名相同的行在输出中也保持其原始的相对顺序。
解决方案 7:
我只想补充一些提示,当您使用 sort 时,请注意您的语言环境会影响键比较的顺序。我通常明确使用 LC_ALL=C 来设置我想要的语言环境。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件