Bash
合併帶有條件的 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 }
試試這個:
$ 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
中,key 為 id,value 為更新時間。讀取 file_2 時:
- 如果 id 的更新日期
$4
大於對應的 id 更新時間保存在數組u
($4 > u[$1]
) 中,我們列印該行並跳到下一行。- 如果上述條件為假,我們檢查目前行的創建日期是否為今天
t ~ $3
,即"2014-7-11" ~ "2014-7-11 12:00"
如果為真則列印該行。