2013-03-18 44 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