发布网友 发布时间:2022-04-23 12:40
共4个回答
热心网友 时间:2023-01-22 03:58
1、sort 用法参数有 -urontk
-u 去重
-r 降序
-o 标准输出
-n 换数字排序
-t 指定分隔符
-k 指定以第列来排序
-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写
-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1
-M会以月份来排序,比如JAN小于FEB等等
-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。
2、所以主要用到了-t 与-k参数
# ls |sort -t "_" -k 3热心网友 时间:2023-01-22 05:16
经过多方查找和测试,终于帮你解决了,还是对sort -k参数理解的不透彻的原因,按如下试试吧
sort -t "_" -k 1,1 -k 3 test.1
追问额,总算可以了,谢谢了啊,能解释一下直接-k1为什么不行,为什么要-k 1,1呢
追答-k的参数比较多,详细如下,摘自网上,请多理解:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
这个语法格式可以被其中的逗号(“,”)分为两大部分,Start部分和End部分。(F指域field C指字符char )
先给你灌输一个思想,那就是“如果不设定End部分,那么就认为End被设定为行尾”。这个概念很重要的,但往往你不会重视它。
Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStart和C.Start。
C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。之前例子中的-k 2和-k 3就是省略了C.Start的例子喽。
FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。
同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。
热心网友 时间:2023-01-22 06:51
sort -t '_' -k3 zz.txt
l1, l2 都在第三列
追答请接受回答。谢谢~
热心网友 时间:2023-01-22 08:42
它是先按第一个区间排序,如果相同再按第三个区间排序,你可以sort -t '_' -k3 test.1这样