2013-02-14 49 views
-1

文件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 

所有的文件file1昭数据ULD被打印 - 不管有参考file2中找到或没有 如果参考文件2中发现,那么特定字段(字段2和3)将在输出文件获得串连

+0

请大家看我的答案怎么办一个连接,并修复您的预期输出或更新您的问题,以清楚地描述您实际需要的内容。 – 2013-02-14 08:56:06

+0

投票结束,因为问题不太可能解决。 – 2013-02-14 09:58:10

回答

1

如果我正确理解你,你想分别顺序匹配file1中的字段5和1到file2,如果没有匹配,应该使用“NODATA”字段。下面来靠近你想要什么,我觉得你列出的输出有一定的误差,看到sudo_O提出的意见:

parse.awk

BEGIN { FS = OFS = "," } 
FNR == NR { 
    lines[$1][++count[$1]] = $2 FS $3 
    next 
} 

count[$5] == 0 { print $0, " NODATA" } 
count[$5] > 0 { 
    count[$5]-- 
    print $0, lines[$5][++prn[$5]] 
} 

运行这样的:

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 
+0

你好托尔,现在我的语法错误与你的命令..你能请帮助 – 2013-02-18 11:44:38

+0

我认为它可能是awk版本..现在它的修改后工作如:重写数组行[$ 1] [++ count [$ 1] ]作为行[$ 1,++ count [$ 1]] ..非常感谢你Thor :) – 2013-02-18 12:14:14

1

尝试这一个衬里:

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 
+0

有三个文件1,session-555,其中两个用于匹配文件2,数据不同,第三个用于提出“NODATA”,因为其他匹配已经“用完”所有会议555可用。 – 2013-02-14 09:30:53