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