2015-11-08 33 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/ 

会打印出只有在这两个文件中的相应行有匹配的路径。也不需要保留内存中的行,可能对大文件很重要。

相关问题