1

エポック時間をマイクロ秒単位で表示する 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)

4

1 に答える 1

1

要件を満たす 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
}
于 2011-10-08T04:00:05.893 に答える