awk:如何剪切两个字段的相似部分,然后得到剩余部分的差异?

发布于 2024-12-08 16:04:06 字数 523 浏览 0 评论 0原文

假设我有 2 个以微秒为单位显示纪元时间的字段:

1318044415123456,1318044415990056

我想做的是:

  1. 从两个字段中剪切公共部分:“1318044415”
  2. 获取其余部分的差异:990056 - 123456 = 866600

我为什么这样做这?因为 awk 使用浮点 IEEE 754 而不是 64 位整数,所以我需要获取 2 个事件的纪元时间差(以微秒为单位)。

感谢您的帮助!

编辑:

最后我发现 Awk 在 Snow Leopard 10.6.8 上可以处理的最大数量:9007199254740992

试试这个:echo '9007199254740992' | awk -F ',' '{print $1 + 0}'

Awk 的版本为 20070501(由 awk --version 生成)

Let say I have 2 fields displaying epoch time in microseconds:

1318044415123456,1318044415990056

What I wanted to do is:

  1. Cut the common part from both fields: "1318044415"
  2. Get the difference of the remaining parts: 990056 - 123456 = 866600

Why am I doing this? Because awk uses floating point IEEE 754 but not 64 bit integers and I need to get difference of epoch time of 2 events in microseconds.

Thanks for any help!

EDIT:

Finally I found the largest number Awk could handle on Snow Leopard 10.6.8: 9007199254740992.

Try this: echo '9007199254740992' | awk -F ',' '{print $1 + 0}'

The version of Awk was 20070501 (produced by awk --version)

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

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

发布评论

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

评论(1

人间☆小暴躁 2024-12-15 16:04:06

这是一个满足您要求的 awk 脚本:

BEGIN {
    FS = ","
}
{
    s1 = $1
    s2 = $2
    while (length(s1) > 1 && substr(s1, 1, 1) == substr(s2, 1, 1))
    {
        s1 = substr(s1, 2)
        s2 = substr(s2, 2)
    }
    n1 = s1 + 0
    n2 = s2 + 0
    print n2 - n1
}

Here is an awk script that meets your requirements:

BEGIN {
    FS = ","
}
{
    s1 = $1
    s2 = $2
    while (length(s1) > 1 && substr(s1, 1, 1) == substr(s2, 1, 1))
    {
        s1 = substr(s1, 2)
        s2 = substr(s2, 2)
    }
    n1 = s1 + 0
    n2 = s2 + 0
    print n2 - n1
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文