我想更新文件1基于文件2。如果file2中有任何新行,则应将其添加到file1中。如果file2中的任何一行已经存在于file1中,那么如果file2中的时间更长,那么使用file2中的行更新该行。awk |添加新行或更新文件中的现有行
file1的
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
file2的
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
newfile1
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
注:
- 第二场建议立即进行删除d在输出中是唯一的。
- 添加新值:根据日期列(第3字段)取
file2
中值为“1111111104”的最新第2字段,其为更新(201312051016),然后是旧值(201312051014)。 - 更新现有值:根据第3列中的日期更新“1111111102”
- file1非常大,而file2只有5-10个条目。
- 行与第二个字段“1111111101”不需要更新,因为它在
file1
中的条目已经具有最新日期“201312051014”与在file2
中的新日期“201312041013”相比较。
我没有尝试过很多关于这个,因为它真的有,我作为初学者复杂条件..
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];
}
什么问题?我不知道你在努力达到什么目的。尝试解释你想要的而不是仅仅发布一些文件和无法理解的笔记 - 然后有人会提供帮助。 –
我对此表示歉意,如果我无法正确解释它。现在我已经添加了小的摘要。让我知道如果我需要解释mote。 –