2017-04-24 50 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 
相關問題