Awk 基于某个公共字段合并2个文件的内容

Awk 基于某个公共字段合并2个文件的内容,awk,Awk,文件1 a,b, c, d,session-111, e, f p,f, y, j,session-222, e, o p,e, c, j,session-333, e, r t,y, u, j,session-444, r, r t,y, u, j,session-555, e, w e,g, m, j,session-555, e, m e,e, m, j,session-555, e, m 文件2 session-111, data-123, 123, erwt session-222,

文件1

a,b, c, d,session-111, e, f
p,f, y, j,session-222, e, o
p,e, c, j,session-333, e, r
t,y, u, j,session-444, r, r
t,y, u, j,session-555, e, w
e,g, m, j,session-555, e, m
e,e, m, j,session-555, e, m
文件2

session-111, data-123, 123, erwt
session-222, data-234, 345, fghjf
session-333, data-345, 456, aasdf
session-555, data-567, 789, aasdf
session-555, data-890, 121, aasdf
session-666, data-678, 121, aasdf
输出

a,b, c, d,session-111, e, f, data-123, 123
p,f, y, j,session-222, e, o, data-234, 345
p,e, c, j,session-333, e, r, data-345, 456
t,y, u, j,session-444, e, r, NODATA
t,y, u, j,session-555, e, r, date-567, 789
t,y, u, j,session-555, e, r, date-890, 121
e,e, m, j,session-555, e, m, NODATA
应打印文件1中的所有数据-无论文件2中是否存在引用 如果在文件2中找到了引用,则特定字段(字段2和字段3)将在输出文件中得到浓缩

awk -F, 'NR==FNR{k[$1]=$2 OFS $3;next} {if($5 in k)print $0,k[$5];else print $0," NODATA"}'  OFS="," file2 file1
a,b, c, d,session-111, e, f, data-123, 123
p,f, y, j,session-222, e, o, data-234, 345
p,e, c, j,session-333, e, r, data-345, 456
t,y, u, j,session-444, r, r, NODATA
t,y, u, j,session-555, e, w, data-890, 121
e,g, m, j,session-555, e, m, data-890, 121
e,e, m, j,session-555, e, m, data-890, 121

如果我理解正确,您希望依次将file1中的字段5和1与file2匹配,如果不匹配,则应使用“NODATA”字段。下面是您想要的,我认为您列出的输出有一些错误,请参阅sudo_O的评论:

解析.awk

按如下方式运行:

awk -f parse.awk file2 file1
输出:

a,b, c, d,session-111, e, f, data-123, 123
p,f, y, j,session-222, e, o, data-234, 345
p,e, c, j,session-333, e, r, data-345, 456
t,y, u, j,session-444, r, r, NODATA
t,y, u, j,session-555, e, w, data-567, 789
e,g, m, j,session-555, e, m, data-890, 121
e,e, m, j,session-555, e, m, NODATA

请查看我的答案,了解如何进行连接,修复您的预期输出或更新您的问题,以清楚地描述您实际需要的内容。投票结束问题不太可能解决。在文件1 session-555中有三个问题,其中两个是使用不同的数据“匹配”文件2,第三个是使用“NODATA”由于其他匹配已经“用完”了所有可用的会话-555。你好,托尔,现在我发现你的命令有语法错误。。我想可能是awk版的。。现在它在修改后工作,比如:将数组行[$1][++count[$1]]重写为行[$1,++count[$1]。。非常感谢你,托尔:)
a,b, c, d,session-111, e, f, data-123, 123
p,f, y, j,session-222, e, o, data-234, 345
p,e, c, j,session-333, e, r, data-345, 456
t,y, u, j,session-444, r, r, NODATA
t,y, u, j,session-555, e, w, data-567, 789
e,g, m, j,session-555, e, m, data-890, 121
e,e, m, j,session-555, e, m, NODATA