awkを使用して2つのファイルの2つの日付間の違いを印刷する方法

awkを使用して2つのファイルの2つの日付間の違いを印刷する方法

各一意のID($ 1)に対して、ファイル1の最も早い日付($ 2)とファイル2の日付($ 2)の間の日数の違いを印刷する必要があります。これにより、ID($ 1)と日付の違いを出力ファイルとして取得できます。

ファイル1

102 2008-06-12 11:08:12 23
105 2005-05-16 20:15:05 15
102 2009-01-30 13:16:45 38
105 2006-06-14 15:30:25 45
102 2009-04-13 24:25:30 45
105 2006-07-23 13:23:30 12
108 2004-05-21 12:25:15 15
108 2005-04-29 06:15:13 23

ファイル2

102 20060305 13
105 20040530 12
108 20021225 21

希望の出力

102 827 
105 351
108 511

ベストアンサー1

持っているかどうかGNU awkmktime機能性

awk '
    FNR == NR{
        d = mktime(gensub("[-:]", " ", "g", $2 FS $3))
        if(D[$1] > d || ! D[$1])
            D[$1] = d
        next
    }
    {
        d = substr($2, 1, 4) FS substr($2, 5, 2) FS substr($2, 7) " 0 0 0"
        printf "%i %i\n", $1, (D[$1] - mktime(d)) / 86400
    }
    ' file1 file2

生産する

102 830
105 351
108 513

おすすめ記事