awk - 仅当File1"中的Col4值为"时,才从File1.csv和File2.csv生成output.csv文件。 =" File2&#34中col5的值;

时间:2015-11-08 11:38:50

标签: csv awk

您好我有2个csv文件

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中的路径相等时才从File1.csv和File2.csv生成output.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/
  

- >条件是" File1"中Col4的值。 =" File2&#34中col5的值; (f1_col4 = f2_col5)

     

- >生成的output.csv文件应该有8列:   f2_col1; f2_col2; f1_col1; f1_col2; f2_col3; f2_col4; f1_col3; f1_col4

我怎么能用awk做这件事?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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/

仅当两个文件中的相应行具有匹配的路径时才会打印。也不需要将行保留在内存中,对于大文件可能很重要。