2013-02-14 82 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