首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按月排序命令不起作用?

问按月排序命令不起作用?
EN

Unix & Linux用户
提问于 2021-02-04 22:19:32
回答 6查看 1.1K关注 0票数 3

我有一大堆时间戳..。

代码语言:javascript
复制
arr[0]="04-Feb-2021-21-05-48"
arr[1]="18-Jan-2021-12-19-48"
arr[2]="25-Jan-2021-00-24-29"
arr[3]="26-Jan-2021-00-28-33"
arr[4]="04-Feb-2021-21-06-49"
arr[5]="18-Jan-2021-12-19-48"
arr[6]="25-Jan-2021-00-24-29"
arr[7]="26-Jan-2021-00-28-33"

我想对这个数组进行排序,并使用下面的命令将时间戳排序为一个新的数组。

代码语言:javascript
复制
IFS=我得到了这个输出但这不是我想要的..。[26-Jan-2021-00-28-33]
[26-Jan-2021-00-28-33]
[25-Jan-2021-00-24-29]
[25-Jan-2021-00-24-29]
[18-Jan-2021-12-19-48]
[18-Jan-2021-12-19-48]
[04-Feb-2021-21-06-49]
[04-Feb-2021-21-05-48]相反,我希望时间戳按降序排序。那我怎么得到这个结果呢?[04-Feb-2021-21-06-49]
[04-Feb-2021-21-05-48]
[26-Jan-2021-00-28-33]
[26-Jan-2021-00-28-33]
[25-Jan-2021-00-24-29]
[25-Jan-2021-00-24-29]
[18-Jan-2021-12-19-48]
[18-Jan-2021-12-19-48]我试过这些版本的排序命令,没有一个对我有用.IFS=更新我更新了我的问题,以澄清我想按降序排序时间戳,而不仅仅是按月份字段对时间戳数组进行排序。干杯。\n' sorted=($(sort -r -t- -k2.1,2.3M <<<"${arr[*]}")); unset IFS
printf "[%s]\n" "${sorted[@]}"我得到了这个输出但这不是我想要的..。A2相反,我希望时间戳按降序排序。那我怎么得到这个结果呢?A3我试过这些版本的排序命令,没有一个对我有用.A4K15更新K26我更新了我的问题,以澄清我想按降序排序时间戳,而不仅仅是按月份字段对时间戳数组进行排序。干杯。\n' sorted=($(sort -r -t- -k3.1,3.4 -k2.1,2.3M <<<"${arr[*]}")); unset IFS
IFS=K15更新K26我更新了我的问题,以澄清我想按降序排序时间戳,而不仅仅是按月份字段对时间戳数组进行排序。干杯。\n' sorted=($(sort -r -t- -k2.1,2.3M <<<"${arr[*]}")); unset IFS
printf "[%s]\n" "${sorted[@]}"

我得到了这个输出但这不是我想要的..。

A2

相反,我希望时间戳按降序排序。那我怎么得到这个结果呢?

A3

我试过这些版本的排序命令,没有一个对我有用.

A4K15更新K26

我更新了我的问题,以澄清我想按降序排序时间戳,而不仅仅是按月份字段对时间戳数组进行排序。

干杯。

\n' sorted=($(sort -r -t- -k2.1,2.3M <<<"${arr[*]}")); unset IFS IFS=K15更新K26

我更新了我的问题,以澄清我想按降序排序时间戳,而不仅仅是按月份字段对时间戳数组进行排序。

干杯。

\n' sorted=($(sort -r -t- -k2.1,2.3M <<<"${arr[*]}")); unset IFS printf "[%s]\n" "${sorted[@]}"

我得到了这个输出但这不是我想要的..。

A2

相反,我希望时间戳按降序排序。那我怎么得到这个结果呢?

A3

我试过这些版本的排序命令,没有一个对我有用.

A4K15更新K26

我更新了我的问题,以澄清我想按降序排序时间戳,而不仅仅是按月份字段对时间戳数组进行排序。

干杯。

\n' sorted=($(sort -t- -k2.1,2.3M <<<"${arr[*]}")); unset IFSK15更新K26

我更新了我的问题,以澄清我想按降序排序时间戳,而不仅仅是按月份字段对时间戳数组进行排序。

干杯。

\n' sorted=($(sort -r -t- -k2.1,2.3M <<<"${arr[*]}")); unset IFS printf "[%s]\n" "${sorted[@]}"

我得到了这个输出但这不是我想要的..。

A2

相反,我希望时间戳按降序排序。那我怎么得到这个结果呢?

A3

我试过这些版本的排序命令,没有一个对我有用.

A4K15更新K26

我更新了我的问题,以澄清我想按降序排序时间戳,而不仅仅是按月份字段对时间戳数组进行排序。

干杯。

EN

回答 6

Unix & Linux用户

发布于 2021-02-04 22:30:01

若要仅在给定列上应用“反向”,请在-k之后指定它:

代码语言:javascript
复制
sort -t- -k2.1,2.3Mr
#                  ~
票数 8
EN

Unix & Linux用户

发布于 2021-02-04 22:33:58

在您希望反转的键中使用反向-r,但尝试此方法以获得所需的输出。与其使用复杂的sort's,不如将字符串转换为批准日期格式,然后排序,然后回到原来的格式:

代码语言:javascript
复制
printf "%s\n" "${sorted[@]}" | \
  awk -F'-' '{ print $1" " tolower($2)" "$3" "$4":"$5":"$6 }' | \ # 04 feb 2021 21:05:48
  xargs -I {} date -d {} +"%Y-%m-%d %H:%M:%S" | \ # 2021-02-04 21:05:48
  sort -k1r | \
  xargs -I {} date -d {} +"[%d-%b-%Y-%H-%M-%S]"

输出:

代码语言:javascript
复制
[04-Feb-2021-21-06-49]
[04-Feb-2021-21-05-48]
[26-Jan-2021-00-28-33]
[26-Jan-2021-00-28-33]
[25-Jan-2021-00-24-29]
[25-Jan-2021-00-24-29]
[18-Jan-2021-12-19-48]
[18-Jan-2021-12-19-48]
票数 7
EN

Unix & Linux用户

发布于 2021-02-05 02:28:58

一些perl:

代码语言:javascript
复制
printf '%s\n' "${arr[@]}" \
| perl -MTime::Piece -lne '
    $t = Time::Piece->strptime($_, "%d-%b-%Y-%H-%M-%S");
    push @dates, [$t, $_];
    END {print for map {$_->[1]} sort {$b->[0] <=> $a->[0]} @dates}
  '
票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/632715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档