gpt4 book ai didi

linux - bash 排序 - 如何使用时间戳排序

转载 作者:太空狗 更新时间:2023-10-29 11:45:40 24 4
gpt4 key购买 nike

我需要在 Linux 中使用 shell 排序对文件进行排序。排序需要基于每个文件行中包含的时间戳值。时间戳的格式不规则,没有指定前导零到月、日等,所以我执行的排序不正确(即它们的格式是“M/D/YYYY H:MI:S AM”;所以所以“10/12/2012 12:16:18 PM”出现在“7/24/2012 12:16:18 PM”之前,后者出现在“7/24/2012 12:17:18 AM”之前)。

是否可以根据时间戳排序?

我正在使用以下命令对我的文件进行排序:

sort -t= -k3 file.txt -o file.txt.sorted

(使用等号作为分隔符 => -t=;使用第 3 列作为排序列 => -k3)

示例文件如下:

<r id="abcd" t="10/12/2012 12:16:17 AM"><d><nv n="name" v="868" /><nv n="name0" v="73" /><nv n="name1" v="13815004" /></d></r>
<r id="defg" t="7/24/2012 12:16:17 PM"><d><nv n="name" v="0" /><nv n="name0" v="0" /><nv n="name1" v="0" /></d></r>
<r id="abcd" t="7/24/2012 12:16:17 PM"><d><nv n="name" v="0" /><nv n="name0" v="0" /><nv n="name1" v="0" /></d></r>
<r id="zxy" t="7/24/2012 12:16:17 PM"><d><nv n="name" v="0" /><nv n="name0" v="0" /><nv n="name1" v="59542676" /></d></r>
<r id="fghj" t="7/24/2012 12:16:17 PM"><d><nv n="name" v="38" /><nv n="name0" v="0" /><nv n="name1" v="3004537" /></d></r>
<r id="defg" t="7/24/2012 12:16:18 AM"><d><nv n="name" v="177" /><nv n="name0" v="0" /><nv n="name1" v="5888870" /></d></r>

最佳答案

linux date 命令可以像这样很好地解析日期,它可以将它们转换成更可排序的东西,比如简单的 unix 时间整数。

例子:

cat file | while read line; do
datestring=$(sed -e 's/^.* t="\([^"]*\)".*$/\1/' <<<"$line")
echo "$(date -d "$datestring" +%s) $line"
done | sort -n

如果您希望再次删除该 unix 时间戳,则可以通过适当的 cut 调用传递它。

关于linux - bash 排序 - 如何使用时间戳排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17844072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com