2015-11-08 71 views
1

你好,我有2個csv文件之間的AWK - 從生產和File1.csv的File2.csv文件output.csv僅= 「在文件2 COL5的價值」, 「COL4 File1中的價值」

File1.csv( 4列)

3 T;3.0 T;269.8 M;/path1/ 
3 T;3.0 T;3.4 G;/path2/ 

File2.csv(5列)

10000;9459;206;335;/path1/ 
10000;8543;205;1252;/path2/ 

欲產生從File1.csv和File2.csv僅當output.csv文件中File1.csv和File2路徑.csv等於

產生應的輸出文件:

10000;9459;3 T;3.0 T;206;335;269.8 M;/path1/ 
10000;8543;3 T;3.0 T;205;1252;3.4 G;/path2/ 

- >的條件是 「COL4 File1中的值」= 「file2中COL5的值」(f1_col4 = f2_col5)

- - >生產應該有8列的output.csv文件: f2_col1; f2_col2; f1_col1; f1_col2; f2_col3; f2_col4; f1_col3; f1_col4

我怎樣才能做到這一點使用awk嗎?

+0

是否有你想使用awk的原因?其他解決方案可以接受嗎?到目前爲止你嘗試過什麼,你堅持什麼? –

回答

1
awk -F ';' -vOFS=';' 'NR==FNR{a[$NF]=$0;next}a[$NF]{split(a[$NF],t);print $1,$2,t[1],t[2],$3,t[3],$NF}' file1 file2 
0

如果您想通過線匹配線這也許會做

$ paste -d';' file2 file1 
    | awk -F';' -v OFS=';' '$5==$NF{print $1,$2,$6,$7,$3,$4,$8,$9}' 

10000;9459;3 T;3.0 T;206;335;269.8 M;/path1/ 
10000;8543;3 T;3.0 T;205;1252;3.4 G;/path2/ 

會打印出只有在這兩個文件中的相應行有匹配的路徑。也不需要保留內存中的行,可能對大文件很重要。

相關問題