我正在try 根据日期和时间反向排序这两行,我使用的是下面的命令,它工作得很好,但没有考虑AM和PM,所以下面两行没有正确排序,因为第一行的时间是上午10点,第二行是下午2点

命令:

sort -t',' -k2,2 -k7,7r file.csv

行数:

在排序之前:

field1,field2,field3,field4,field5,field6,19-NOV-23 10.58.03.000000 AM
field1,field2,field3,field4,field5,field6,19-NOV-23 02.48.47.000000 PM

排序后的行(排列相同)

field1,field2,field3,field4,field5,field6,19-NOV-23 10.58.03.000000 AM
field1,field2,field3,field4,field5,field6,19-NOV-23 02.48.47.000000 PM

推荐答案

man sort(GNU排序):

-k, --key=KEYDEF
       sort via a key; KEYDEF gives location and type

KEYDEF  is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where
F is a field number and C a character position in the field;  both  are
origin 1, and the stop position defaults to the line's end. - -  
OPTS is one or more single-letter ordering options [bdfgiMhnRrV] - -

数据中的第7字段:

         1111111111222222222
1234567890123456789012345678
19-NOV-23 10.58.03.000000 AM
19-NOV-23 02.48.47.000000 PM

首先定义反向(或在OPTS中)、字段分隔符和年份(字段7,位置8和9,数字):

sort -r -t, -k7.8,7.9n file

然后是月份(GNU排序中的M订购选项):

sort -r -t, -k7.8,7.9n -k7.4,7.6M file

然后是日期和AM/PM(实际上是A/P):

sort -r -t, -k7.8,7.9n -k7.4,7.6M -k7.1n,7.2n -k7.27 file

然后是时间部分(留下来锻炼).

有了以上内容,您将获得:

field1,field2,field3,field4,field5,field6,19-NOV-23 02.48.47.000000 PM
field1,field2,field3,field4,field5,field6,19-NOV-23 10.58.03.000000 AM

Linux相关问答推荐

C++17:G++8.5版似乎无法正确生成无符号64位伪随机整数

通过ssh传输参数时避免字符串拆分

Flutter 构建错误:';DART:JS_interop';在此平台上不可用

使用awk命令将以:分隔的两个文件合并的方法

在不编写任何代码的情况下,是否有一个命令可以检索当前 shell 的亲和力中的可用内核数?

为什么我在从 Linux 通过 telnet 发送 Ctrl-C 后停止接收数据?

普通用户 chown(仅更改组)

是否可以在 XTerm 或 Konsole 中使 stdout 和 stderr 输出具有不同的 colored颜色 ?

如何使用 gcc 编译为程序集

如何找出哪个进程正在消耗等待 CPU(即 I/O 阻塞)

如何在 Ubuntu 上安装 chkconfig?

diff 命令仅获取不同行的数量

为什么 XGrabKey 会生成额外的聚焦和聚焦事件?

Vagrant chicken-and-egg:与 uid = apache 用户共享文件夹

bash 脚本中的自动 docker 登录

比较两个图像的 python/linux 方式

在 Linux 上忽略 glob() 中的大小写

Anaconda 安装后,conda 命令失败并显示ImportError: no module named conda.cli

id_rsa.pub 文件 SSH 错误:格式无效

Linux 上的 OpenVPN:在命令行中传递用户名和密码