【发布时间】:2013-12-09 04:28:33
【问题描述】:
我想在file2的基础上更新file1。如果 file2 中有任何新行,则应将其添加到 file1 中。如果 file2 中的任何行已经在 file1 中,则如果 file2 中的时间更长,则使用 file2 中的行更新该行。
文件1
DL,1111111100,201312051013,val,FIX01,OptIn,N,Ext1,Ext2
DL,1111111101,201312051014,val,FIX01,OptIn,Y,Ext1,Ext2
DL,1111111102,201312051015,val,FIX01,OptIn,Y,Ext1,Ext2
DL,1111111103,201312051016,val,FIX01,OptIn,N,Ext1,Ext2
文件2
DL,1111111101,201312041013,val,FIX02,OptIn,N,Ext1,Ext2
DL,1111111102,201312051016,val,FIX02,OptIn,N,Ext1,Ext2
DL,1111111102,201312051017,val,FIX02,OptIn,N,Ext1,Ext2
DL,1111111104,201312051014,val,FIX01,OptIn,Y,Ext1,Ext2
DL,1111111104,201312051016,val,FIX02,OptIn,Y,Ext1,Ext2
新文件1
DL,1111111100,201312051013,val,FIX01,OptIn,N,Ext1,Ext2
DL,1111111101,201312051014,val,FIX01,OptIn,Y,Ext1,Ext2
DL,1111111102,201312051017,val,FIX02,OptIn,N,Ext1,Ext2
DL,1111111103,201312051016,val,FIX01,OptIn,N,Ext1,Ext2
DL,1111111104,201312051016,val,FIX02,OptIn,Y,Ext1,Ext2
注意事项:
- 第二个字段在输出中应该是唯一的。
- 添加新值:在日期列(第三个字段)的基础上,取
file2中值“1111111104”的最新第二个字段(201312051016)然后旧值(201312051014)。 - 更新现有值:根据第 3 列中的日期将“1111111102”更新为新值
- file1 非常大,而 file2 只有 5-10 个条目。
- 第二个字段“1111111101”的行不需要更新,因为与
file2中的新日期“201312041013”相比,file1中的条目已经具有最新日期“201312051014”。
我没有对此进行太多尝试,因为它对我作为初学者来说确实有复杂的条件..
BEGIN { FS = OFS = "," }
FNR == NR {
m=$2;
a[m] = $0;
next
}
{
if($2 in a)
{
split(a[$2],datetime,",")
if($3>datetime[3])
print $0;
else
print a[$2]"Old time"
}
else print $0"NOMATCH";
delete a[$2];
}
【问题讨论】:
-
问题是什么?我不知道你想要达到什么目的。试着解释你想要什么,而不是仅仅发布一些文件和难以理解的笔记 - 然后有人会提供帮助。
-
如果我不能正确解释,我很抱歉。现在我也添加了小摘要。如果我需要解释,请告诉我。
标签: awk