文件1
会话= 1 | W,eventbase = 4,操作= 1,规则= 15
会话= 1 | E,eventbase = 5,操作= 2,规则= 14
session = 2 | t,eventbase =,operation = 1,rule = 13
file2的
FIELD1,FIELD2,字段3,会话= 1,字段N,操作= 1,字段N
FIELD1,FIELD2,字段3,会话= 1,字段N,操作= 2,字段N
FIELD1,FIELD2,字段3,会话= 2,字段N,操作= 2,字段N
field1,field2,field3,session = 2,fieldn,operation = 1,fieldn
输出
FIELD1,FIELD2,字段3,会话= 1,字段N,操作= 1,字段N,eventbase = 4,规则= 15
FIELD1,FIELD2,字段3,会话= 1,字段N,操作= 2,字段N,eventbase = 5,规则= 14
FIELD1,FIELD2,字段3,会话= 2,字段N,操作= 2,字段N,NOMATCH
field1,field2,field3,session = 2,fieldn,operation = 1,fieldn,eventbase =,rule = 13
我试过了
BEGIN {FS = OFS =“,”}
FNR == NR {
拆分($ 1,S, “|”)
会话= S [1];
a [session,$ 3] = session“,”$ 2“,”$ 3“,”$ 4;
接下来
}
{
拆分($ 4,X, “|”);
nsession = X [1];
if(nsession in a)打印$ 0 a [nsession,$ 6];
否则打印$ 0“,NOMATCH”;
}
问题是我无法使用if(nsession in a)查找2D数组中的nsession 在会话和操作的组合基础上匹配2个文件
答案 0 :(得分:0)
谢谢..它帮了..现在我正在学习:)谢谢团队
BEGIN {FS = OFS =“,”}
FNR == NR {
拆分($ 1,S, “|”)
会话= S [1];
a [session,$ 3] = session“,”$ 2“,”$ 3“,”$ 4;
接下来
}
{
拆分($ 4,X, “|”);
nsession = X [1];
key = nsession SUBSEP $ 6
if(键入a)打印$ 0 a [nsession,$ 6];
否则打印$ 0“,NOMATCH”;
}
答案 1 :(得分:0)
你可以尝试
awk -f merge.awk file1 file2
其中merge.awk
是
NR==FNR {
sub(/[[:blank:]]*$/,"")
getSessionInfo(1)
ar[ses,op]=",eventbase="evb",rule="rule
next
}
{
sub(/[[:blank:]]*$/,"")
getSessionInfo(0)
if ((ses,op) in ar)
print $0 ar[ses,op]
else
print $0 ",NOMATCH"
}
function getSessionInfo(f, a) {
match($0,/session=([^|])[|,]/,a)
ses=a[1]
match($0,/operation=([^,]),/,a)
op=a[1]
if (f) {
match($0,/eventbase=([^,]),/,a)
evb=a[1]
match($0,/rule=(.*)$/,a)
rule=a[1]
}
}