2013-03-18 59 views
1

我已經設置的文件,1個解答文件和幾個結果文件 原始文件的文件,我需要比較每個答案的成果文件,但結果文件可能不具有相同數量或行。比較針對不同的行數

應答文件

q1, true 
q2, false 
q3, false 
q4, true 
q5, true 

結果1

q1, true 
q2, false 
q3, true 

表我想有

q1, 1 
q2, 1 
q3, 0 
q4, 0 
q5, 0 

因此,如果數據不匹配,那麼其1,否則它的0,如果行不存在,再次將其視爲0 ---結果文件夾中的所有文件都應該發生相同的操作。

我試過到目前爲止:

awk -F "," '{print $0}' answer.csv | grep -f - result01.csv > me.csv 

打印出正確的答案只有

,是有機會做同樣的如果結果的數據如下所示?

結果1

data/q1, true 
data/q2, false 
data/q3, true 
+0

你要我們做你的家庭作業? =) – 2013-03-18 15:10:32

+0

@ 75inchpianist:我到目前爲止已經有'awk -F「,''{print $ 0}'answer.csv | grep的-f - result01.csv> me.csv'打印出正確asnwers只有 – 2013-03-18 15:14:36

+0

始終把你的搜索結果在您的問題 – 2013-03-18 15:15:23

回答

2

使用awk比較結果文件r對答案a文件:

$ awk 'FNR==NR{a[$1]=$2;next}$1 in a{print $1,a[$1]==$2;next}{print $1,0}' r a 
q1, 1 
q2, 1 
q3, 0 
q4, 0 
q5, 0 
+0

我設法得到的結果,但有一個問題當我試圖用「result.csv」 – 2013-03-18 15:25:51

+1

來重放「r」時,我會從擴展名'.csv'中猜測,並且您以後使用'-F'添加了自己的嘗試,「'您的實際文件與發佈的文件不同* eg *'q1,true' ** not **'q1 true'!? – 2013-03-18 15:28:23

+0

這是它適用於現在,但不能使它工作,你提到'的awk「FNR == NR {R [$ 1] = $ 2;未來}的方式$ 1 {打印$ 1,R [$ 1] == $ 2 1? :0;下一} {$打印1,0}」 result01.csv answer.csv> me01.csv' – 2013-03-18 15:29:41

2

看看它可以用來比較由線兩個排序文件行comm命令。

例如:

$ comm -2 <(sort answerFile) <(sort resultFile) 
     q1 true 
     q2 false 
q3 false 
q4 true 
q5 true 

第一列包含獨特到file1線和所述第二列包含兩個文件共有線。

+0

以獲得所需的輸出管道進入'的awk「{打印$ 1,/^[[:空間:]] /}」' – 2013-03-18 16:44:01