2017-04-24 106 views
0

我之前发布但自那时以来做了一些更改,格式发生了很大变化,因此再次启动问题以适应新格式。比较2 CSV文件,输出到组合数据的第三个文件

我有2个csv电子表格,每个电子表格有2列。它们的格式如下:

File1.csv 

string,Value 

string1,4 

string2,5 

string3,6 

string4,7 

string5,8 

string6,9 

然后第二个文件是;

File2.csv 

string,Value 

string4,8 

string5,7 

string1,3 

string2,7 

string3,4 

string7,5 

请注意,这两个文件中的订单是随机的。 file1中也有不存在于file2中的条目,注意sting6只在file1中有多少。

我想要做的就是使用Bash(或者python,如果更简单的话)查看文件1,在文件2中找到相同的字符串,然后将这个值输出到第三个文件中,例如:

output.csv 
string1,4,3 
string2,5,7 
string3,6,4 
string4,7,8 
string5,9,7 
string6,9, 
string7,,5 

再次,通知字符串6存在但没有比较。

我已经尝试过以下但没有运气;

#!/bin/bash 
awk 'BEGIN {FS=OFS=","} 
     NR==FNR {a[$1]=$2; next} 
     FNR==1 {print $1,$2"1",a[$1]"2"; next} 
       {print $1,$2,a[$1]}' File1.csv File2.csv 

当我运行此我得到一些奇怪的输出是这样的:

4tring,4 
,3string2,5 
,7string3,6 
,4string4 

乐于尝试其他的方法,如果这是不是最好的。

+0

是此行'串,Value'总是存在于每个文件(第一个)? – RomanPerekhrest

+0

是的,完全一样 – snowblind

+0

@snowblind不要为同一个问题提出一个新问题。如果你认为结局是错误的 - 请在这个问题与链接结果不同的地方添加更多细节......对我来说,这是同一个问题。 – jm666

回答

0

在AWK

$ awk ' 
BEGIN { FS=OFS="," }    # set delimiters 
NR==FNR { a[$1]=$2; next }   # hash first file 
{ print $1,a[$1],$2; delete a[$1] } # output second file matches and non-matches 
END { for(i in a) print i,a[i] } # output leftovers from file 1 
' file1 file2      # mind the order 
string,Value,Value 
string4,7,8 
string5,8,7 
string1,4,3 
string2,5,7 
string3,6,4 
string7,,5 
string6,9 
相关问题