微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将日期和时间戳转换为不同的格式

如何解决将日期和时间戳转换为不同的格式

专家 我在名为 inputdata.file 的文本文件中保存了三列数据 (date,timing,extrainfo)。

在循环中,我想明智地读取数据行,并想从第一列数据打印 yearjulianday。

其次,对于第二列数据,我想以 hour minute second 格式打印输出,但在这里我想减去 60 秒并希望以相同的 hour {{1 }} 格式。另外,我不想对第三列做任何操作。

例如,在下面附加的数据中,第一行包含 minute second从这个数据开始,我只想将 2019-01-02 转换为 2019+它的儒略日,即 2019002。

其次 07:41:26.225000 应在扣除 60 秒后转换为相同的 hr:min:sec 格式,即 07:40:26.225000 。对于其他行,我也想这样做。

2019-01-02 07:41:26.225000   5.49.

预期输出

2019-01-02 07:41:26.225000   5.49
2019-01-05 19:43:54.185000   5
2019-01-07 19:05:21.165000   5.18

我试过这个脚本:

2019-01-02 07:41:26.225000   5.49   2019002  07:40:26.225000
2019-01-05 19:43:54.185000   5      2019005  19:42:54.185000   
2019-01-07 19:05:21.165000   5.18   2019007  19:04:21.165000 

然而,由于我是 shell 脚本的新手,对此不太了解。请帮忙。谢谢。

解决方法

while IFS= read -r line ; do
    read -r date time extra <<<"$line"
    IFS=. read -r hms fraction <<<"$time"
    newtimestamp=$(date -d "$hms $date -60 seconds" '+%Y%j %T')
    printf '%s %s.%s\n' "$line" "$newtimestamp" "$fraction" 
done < file | column -t
添加

column 以美化输出:如果不需要,请将其删除。

我在输出中添加了额外的一行,以表明您必须从日期和时间中减去 60 秒。

输入:

2019-01-02 07:41:26.225000   5.49
2019-01-05 19:43:54.185000   5
2019-01-07 19:05:21.165000   5.18
2020-01-01 00:00:01.0        foobar

输出:

2019-01-02  07:41:26.225000  5.49    2019002  07:40:26.225000
2019-01-05  19:43:54.185000  5       2019005  19:42:54.185000
2019-01-07  19:05:21.165000  5.18    2019007  19:04:21.165000
2020-01-01  00:00:01.0       foobar  2019365  23:59:01.0
,

将 GNU awk 用于时间函数和 gensub():

$ cat tst.awk
BEGIN { OFS="\t" }
{
    secs = mktime(gensub(/[-:]/," ","g",$1" "$2))
    ms   = gensub(/.*\./,"",1,$2)

    print $1" "$2,$3,strftime("%Y%j",secs),strftime("%T.",secs-60) ms
}

$ awk -f tst.awk file
2019-01-02 07:41:26.225000      5.49    2019002 07:40:26.225000
2019-01-05 19:43:54.185000      5       2019005 19:42:54.185000
2019-01-07 19:05:21.165000      5.18    2019007 19:04:21.165000

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。