如何从日期字符串中计算出尴尬内部的时代?

发布于 2025-02-08 18:48:36 字数 911 浏览 2 评论 0原文

我有一个带有数据的文件:

2022-05-03 00:00:05,11.9 kW
2022-05-03 00:00:15,11.8 kW
2022-05-03 00:00:25,11.9 kW
2022-05-03 00:00:35,11.9 kW
2022-05-03 00:00:45,11.9 kW
2022-05-03 00:00:55,11.9 kW
2022-05-03 00:01:05,11.9 kW
2022-05-03 00:01:15,12.0 kW
2022-05-03 00:01:25,12.0 kW

这是我的尴尬脚本来计算时期时间:

#!/usr/bin/awk -f 

BEGIN {
    FS=","
}

/^[0-9]./ {
    print $1
       cmd="date -d \"$1\" +%s"
       cmd | getline $1
       close(cmd)
       print $1, $2
       next
}

我期望的输出是一个不断增加的时代和功率读数:

1651528805 11.9 kW
1651528815 11.8 kW 
1651528825 11.9 kW 
1651528835 11.9 kW
1651528845 11.9 kW
...

但是,我得到了一个恒定的时代值:

1655589600 11.9 kW
1655589600 11.8 kW
1655589600 11.9 kW
1655589600 11.9 kW
1655589600 11.9 kW
1655589600 11.9 kW
1655589600 11.9 kW
1655589600 12.0 kW

为什么?显然,时期计算无法按预期工作。我该如何纠正?

I have a file with data:

2022-05-03 00:00:05,11.9 kW
2022-05-03 00:00:15,11.8 kW
2022-05-03 00:00:25,11.9 kW
2022-05-03 00:00:35,11.9 kW
2022-05-03 00:00:45,11.9 kW
2022-05-03 00:00:55,11.9 kW
2022-05-03 00:01:05,11.9 kW
2022-05-03 00:01:15,12.0 kW
2022-05-03 00:01:25,12.0 kW

And this is my awk script to calculate the epoche time:

#!/usr/bin/awk -f 

BEGIN {
    FS=","
}

/^[0-9]./ {
    print $1
       cmd="date -d \"$1\" +%s"
       cmd | getline $1
       close(cmd)
       print $1, $2
       next
}

The output that I expect is an ever-increasing epoch and the power reading:

1651528805 11.9 kW
1651528815 11.8 kW 
1651528825 11.9 kW 
1651528835 11.9 kW
1651528845 11.9 kW
...

However, instead I get a constant epoche value:

1655589600 11.9 kW
1655589600 11.8 kW
1655589600 11.9 kW
1655589600 11.9 kW
1655589600 11.9 kW
1655589600 11.9 kW
1655589600 11.9 kW
1655589600 12.0 kW

Why is that? Obviously, the epoche calculation does not work as intended. How do I correct that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

墨小沫ゞ 2025-02-15 18:48:36

使用gawk的 time函数> mktime is space分离“ yyyy mm dd hh mm ss”,

BEGIN {FS = ","}
{
  gsub(/[:-]/, " ", $1)
  epoch = mktime($1)
  print epoch, $2
}

您的命令出错的地方$ 1 insir :

cmd="date -d \"$1\" +%s"
# should be
cmd="date -d \"" $1 "\" +%s"
# or
cmd = sprintf("date -d \"%s\" +%%s", $1)

Using gawk's Time Functions, the argument to mktime is space separated "YYYY mm dd HH MM SS"

BEGIN {FS = ","}
{
  gsub(/[:-]/, " ", $1)
  epoch = mktime($1)
  print epoch, $2
}

Where your command is going wrong is putting $1 inside double quotes:

cmd="date -d \"$1\" +%s"
# should be
cmd="date -d \"" $1 "\" +%s"
# or
cmd = sprintf("date -d \"%s\" +%%s", $1)
白况 2025-02-15 18:48:36
awk -F, '
    function epoche(dt){
        "date -d \""dt"\" +%s" | getline e; return e
    }
    {
        print epoche($1),$2
    }
    ' file

1651528805 11.9 kW
1651528815 11.8 kW
1651528825 11.9 kW
1651528835 11.9 kW
1651528845 11.9 kW
1651528855 11.9 kW
1651528865 11.9 kW
1651528875 12.0 kW
1651528885 12.0 kW
awk -F, '
    function epoche(dt){
        "date -d \""dt"\" +%s" | getline e; return e
    }
    {
        print epoche($1),$2
    }
    ' file

1651528805 11.9 kW
1651528815 11.8 kW
1651528825 11.9 kW
1651528835 11.9 kW
1651528845 11.9 kW
1651528855 11.9 kW
1651528865 11.9 kW
1651528875 12.0 kW
1651528885 12.0 kW
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文