条件に応じてCSVファイルをマージ

条件に応じてCSVファイルをマージ

私は2つを持っていますCSV日付別ファイル(csv_2014_4_15そしてcsv_2014_4_16)には、基本的な構造といくつかのユニークな列があります。

id,name,created_at,updated_at,other columns

12, joe, 2013-1-1 18:30, 2014-2-1 12:00
56, bob, datetime, datetime

この条件に従って2つのcsvファイルをマージしたいと思います。これまで私のコードは次のようになります。

if (csv_date_x.id == csv_date_x+1.id)
{
   if(csv_date_x.updated_at < csv_date_x.updated_at)
         add csv_date_x+1 row into out.csv
}
else {
   if(csv_date_x+1.created_at == TODAY (yyyy-mm-dd)
         add csv_date_x+1 row into out.csv
}

ベストアンサー1

この試み:

$ awk -F',' -v t="$(date +"%Y-%-m-%-d")" '
    FNR == NR {
        u[$1] = $4;
        next;
    }
    $4 > u[$1] {
        print;
        next;
    }
    t ~ $3
' file_1 file_2

説明する

  • 今日の日付を取得して変数に保存します。t
  • file_1を読み取るとき、FNR == NR各IDの各更新時間を連想配列に保存しますu。ここで、キーはID、値は更新時間です。
  • file_2を読むとき:

    • idの更新日が配列$4u$4 > u[$1]に格納されているそのidの更新時間よりも大きい場合は、その行を印刷して次の行にジャンプします。
    • 上記の条件が偽の場合は、現在の行の作成日が今日であることを確認します。t ~ $3つまり"2014-7-11" ~ "2014-7-11 12:00"、真であれば行を印刷します。

おすすめ記事