我想按年、月和日期对下面的输出进行排序。我尝试了一些似乎不起作用的组合。
在下面的输出中,第二列是日期,第三列是月份,第四列是年份。
我尝试以sort
这种方式应用命令:
sort -nk2 -Mk3 -nk4
但它不起作用,因为我收到了错误
sort: options '-Mn' are incompatible
这是我的示例数据文件
adcblz01 14 Mar 2018
adcblz03 23 Nov 2018
aktestlb02 26 Aug 2019
ckicbrwlz1 23 Mar 2018
ckilabbrwlb1 23 Mar 2018
bhuiflz28 09 Mar 2017
bhuiflz47 09 Mar 2017
bhuiflz48 09 Mar 2017
olkeflb24 23 Jul 2019
olkeflz46t2 09 Mar 2017
rrjugflb7 03 Jul 2019
答案1
你已经很接近了,但是排序操作的顺序在两个级别上都是错误的
- 您应该按年(字段 4)排序,然后按月(字段 3)排序,最后按日(字段 2)排序
- 您应该仅将排序限定符(
n
和M
)应用于键,而不是全局
由此产生的排序命令是,
sort -k4n -k3M -k2n
如果您想知道为什么sort: options '-Mn' are incompatible
原始命令会出现错误sort -nk2 -Mk3 -nk4
,那是因为选项主要是从左到右解析的。实际上你写的sort -n -k2 -M -k3 -n -k4
。您现在可以更轻松地看到您将标志-n
和指定-M
为全局操作而不是每个键限定符。
答案2
您可能正在寻找:
$ sort -k4n -k3M -k2n
输出:
bhuiflz28 2017 年 3 月 9 日 bhuiflz47 2017 年 3 月 9 日 bhuiflz48 2017 年 3 月 9 日 olkeflz46t2 2017 年 3 月 9 日 adcblz01 2018 年 3 月 14 日 ckicbrwlz1 2018 年 3 月 23 日 ckilabrwlb1 2018 年 3 月 23 日 adcblz03 2018 年 11 月 23 日 rrjugflb7 2019 年 7 月 3 日 olkeflb24 2019 年 7 月 23 日 aktestlb02 2019 年 8 月 26 日