以“date +%a %b %d %T %Y”格式对日期进行排序

以“date +%a %b %d %T %Y”格式对日期进行排序

我想考虑日期列(示例数据中的最后一列)对文件中的数据进行排序。我尝试了一些命令但没有成功。

样本数据:

Beendet|48149|1550804401|STR|Fri Feb 22  4:00:45 2019
Beendet|940001|1550790961|CBST|Fri Feb 22  0:16:12 2019
Beendet|658521|1550817001|CANS|Fri Feb 22  7:30:10 2019
Beendet|48150|1550775601|EXP|Thu Feb 21 20:00:12 2019
Beendet|7|1550779201|MAS|Thu Feb 21 21:00:23 2019
Beendet|9072|1550777401|AMS0|Thu Feb 21 20:52:17 2019
Beendet|9220|1550804401|AMS1|Fri Feb 22  4:00:09 2019
Beendet|670|1550811601|MOR|Fri Feb 22  6:00:07 2019
Beendet|73|1550790061|HIST|Fri Feb 22  2:00:30 2019
Beendet|122|1550804821|HIST1|Fri Feb 22  4:07:08 2019

这些是我的尝试:

sort -r -k5.12 -k5.9 completefile.txt (sorting using the date and time field lengths)
sort -n -k5,5 completefile.txt 
sort -k5n,5 completefile.txt

所有人都给出相同的结果。

答案1

awk 脚本:将最后一个字段转换为时间戳并进行比较。

#!/usr/bin/awk -f

BEGIN {
    FS = "|"
}

{
    data[NR] = $0
    cmd = "date \"+%s\" --date " "\"" $5 "\""
    cmd|getline
    stamp2idx[$0] = NR
}

END {
    asorti(stamp2idx, sorted)
    for (n in sorted) {
        print data[stamp2idx[sorted[n]]]
    }
}

输出

➤ ./solution.awk data                                                       20:39:09
Beendet|48150|1550775601|EXP|Thu Feb 21 20:00:12 2019
Beendet|9072|1550777401|AMS0|Thu Feb 21 20:52:17 2019
Beendet|7|1550779201|MAS|Thu Feb 21 21:00:23 2019
Beendet|940001|1550790961|CBST|Fri Feb 22  0:16:12 2019
Beendet|73|1550790061|HIST|Fri Feb 22  2:00:30 2019
Beendet|9220|1550804401|AMS1|Fri Feb 22  4:00:09 2019
Beendet|48149|1550804401|STR|Fri Feb 22  4:00:45 2019
Beendet|122|1550804821|HIST1|Fri Feb 22  4:07:08 2019
Beendet|670|1550811601|MOR|Fri Feb 22  6:00:07 2019
Beendet|658521|1550817001|CANS|Fri Feb 22  7:30:10 2019

答案2

如果我理解正确以获得预期的顺序,您应该指定每个字段的排序标准:

sort -k5n -k2M -k3n -k4V file.txt

在哪里

  • -k5n第 5 栏(年份)按数字顺序排列
  • -k2M第 2 栏按“月”顺序排列
  • -k3n第 3 栏(天)按数字顺序排列
  • -k4V第 4 栏(时间)按“版本”顺序

如果可以更改日志流程,请考虑使用date -Is(2019-02-22T12:20:28+00:00),并使用排序

sort -t '|' -k5   file.txt

答案3

我简化了命令并得到了预期的结果:

sort -t '|' -r -k5.8,5.18 -n -k3 completefile.txt 
  1. 对第五列应用长度明智排序并且
  2. 在第三列上进行数字排序。

相关内容