awk:如何削减2个字段的相似部分,然后得到剩余部分的差异?

时间:2011-10-08 03:30:29

标签: csv awk gawk

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

1318044415123456,1318044415990056

我想做的是:

  1. 从两个字段中删除公共部分:“1318044415”
  2. 获取其余部分的差异:990056 - 123456 = 866600
  3. 为什么我这样做?因为awk使用浮点IEEE 754但不使用64位整数,我需要在微秒内获得2个事件的纪元时间差异。

    感谢您的帮助!

    编辑:

    最后,我找到了Awk在Snow Leopard 10.6.8上可以处理的最大数量:9007199254740992

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

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

1 个答案:

答案 0 :(得分:2)

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