Csv Awk:如何切割两个字段中相似的部分,然后得到剩余部分的差异?

Csv Awk:如何切割两个字段中相似的部分,然后得到剩余部分的差异?,csv,awk,gawk,Csv,Awk,Gawk,假设我有两个字段以微秒为单位显示历元时间: 1318044415123456131804415990056 我想做的是: 从两个字段中剪切公共部分:“1318044415” 获取剩余零件的差值:990056-123456=866600 我为什么要这样做?因为awk使用浮点IEEE 754,而不是64位整数,所以我需要以微秒为单位获得两个事件的历元时间差 谢谢你的帮助 编辑: 最后,我发现Awk在雪豹10.6.8上可以处理的最大数量:9007199254740992 试试这个:echo'90071

假设我有两个字段以微秒为单位显示历元时间:

1318044415123456131804415990056

我想做的是:

  • 从两个字段中剪切公共部分:“1318044415”
  • 获取剩余零件的差值:990056-123456=866600
  • 我为什么要这样做?因为awk使用浮点IEEE 754,而不是64位整数,所以我需要以微秒为单位获得两个事件的历元时间差

    谢谢你的帮助

    编辑: 最后,我发现Awk在雪豹10.6.8上可以处理的最大数量:
    9007199254740992

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


    Awk的版本是
    20070501
    (由
    Awk--version
    制作)

    以下是一个符合您要求的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
    }
    

    以下是一个符合您要求的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
    }
    

    你在哪个站台上跑步<代码>echo'1318044415123456131804415990056'| awk-F',“{打印$2-$1}”为我生成
    866600
    。谢谢@Johnsyweb。事实上,它适用于这种情况。然而,在探索Awk时,我将此设置为一个挑战。我可能会使用比大纪元时间大的不同数字。你能提供一个问题的真实例子吗?到目前为止,我用以获得大纪元时间的差异,但尽量使其通用,以便在其他数字较大的情况下重复使用。2**53?我想你必须在周二,6月5日2255 23:47:34 GMT之前解决这个问题。你在哪个平台上运行<代码>echo'1318044415123456131804415990056'| awk-F',“{打印$2-$1}”为我生成
    866600
    。谢谢@Johnsyweb。事实上,它适用于这种情况。然而,在探索Awk时,我将此设置为一个挑战。我可能会使用比大纪元时间大的不同数字。你能提供一个问题的真实例子吗?到目前为止,我用以获得大纪元时间的差异,但尽量使其通用,以便在其他数字较大的情况下重复使用。2**53?我想你必须在周二,6月5日2255 23:47:34 GMT之前解决这个问题。