bash的那种

编程入门 行业动态 更新时间:2024-10-28 02:28:51
本文介绍了bash的那种 - 我怎么样使用时间戳的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我需要在Linux中使用希尔排序进行排序的文件。排序需要基于包含于每个文件的行的时间戳值。时间戳是不规则的格式,并没有指定前导零到月,日等,所以我进行种种不正确(即其格式为M / D / YYYY H:MI:•AM,所以所以二零一二年十月十二日下午12时16分18秒来7/24/2012下午12时16分18秒,之前的7/24/2012上午12点17分18秒)的到来之前。

是否有可能进行排序基于时间戳?

我使用下面的命令来排序我的文件:

排序-t = -K3 file.txt的-o file.txt.sorted

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

一个样本文件如下:

< R n =ABCDT =二○一二年十月一十二日上午12点16分17秒>< D​​>< NV N =名字V =868/>< NV N =NAME0v =73/>< NV N =名称1v =13815004/>< / D>< / R>< R ID =DEFGT =7/24/2012下午12时16分17秒>< D​​>< NV N =名字V =0/>< NV N = NAME0v =0/>< NV N =名称1v =0/>< / D>< / R>< R ID =ABCDT =7/24/2012下午12时16分17秒>< D​​>< NV N =名字V =0/>< NV N = NAME0v =0/>< NV N =名称1v =0/>< / D>< / R>< R ID =ZXYT =7/24/2012下午12时16分17秒>< D​​>< NV N =名字V =0/>< NV N = NAME0v =0/>< NV N =名称1v =59542676/>< / D>< / R>< R ID =fghjT =7/24/2012下午12时16分17秒>< D​​>< NV N =名字V =38/>< NV N = NAME0v =0/>< NV N =名称1v =3004537/>< / D>< / R>< R ID =DEFGT =7/24/2012上午12点16分18秒>< D​​>< NV N =名字V =177/>< NV N = NAME0v =0/>< NV N =名称1v =5888870/>< / D>< / R>

解决方案

而linux 日期命令执行解析日期这样的一个很好的工作,它可以将它们翻译成更可排序的东西,比如简单的UNIX的时间整数。

例如:

猫文件|而读线;做    datestring = $(SED -e的/^.* T =\\([^] * \\)* $ / \\ 1 /。'<<<$线)    回声$(日期-d$ datestring+%S)$线做| -n排序

,那么你可以传递通过相应的剪切如果你想知道unix时间戳再次删除调用。

I need to sort a file using shell sort in linux. The sort needs to be based on timestamp values contained within each of file's rows. The timestamps are of irregular format and don’t specify the leading zeros to months, days, etc, so the sorts I am performing are not correct (i.e. their format is "M/D/YYYY H:MI:S AM"; so so "10/12/2012 12:16:18 PM" comes before "7/24/2012 12:16:18 PM", which comes before "7/24/2012 12:17:18 AM").

Is it possible to sort based on timestamps?

I am using the following command to sort my file:

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

(use equal sign as a separator => -t=; use 3rd column as a sort column => -k3)

A sample file is as follows:

<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>

解决方案

The linux date command does a fine job of parsing dates like this, and it can translate them into more sortable things, like simple unix-time integers.

Example:

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

then you could pass that through the appropriate cut invocation if you want that unix timestamp removed again.

更多推荐

bash的那种

本文发布于:2023-10-28 08:54:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1536150.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:bash

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!