您好我有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做这件事?
答案 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/
仅当两个文件中的相应行具有匹配的路径时才会打印。也不需要将行保留在内存中,对于大文件可能很重要。