按年月和日期对输出进行排序

按年月和日期对输出进行排序

我想按年、月和日期对下面的输出进行排序。我尝试了一些似乎不起作用的组合。

在下面的输出中,第二列是日期,第三列是月份,第四列是年份。

我尝试以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

你已经很接近了,但是排序操作的顺序在两个级别上都是错误的

  1. 您应该按年(字段 4)排序,然后按月(字段 3)排序,最后按日(字段 2)排序
  2. 您应该仅将排序限定符(nM)应用于键,而不是全局

由此产生的排序命令是,

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 日

相关内容