将文件与具有不同行数的原始文件进行比较

时间:2013-03-18 14:45:27

标签: file unix awk compare row

我有一组文件,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

2 个答案:

答案 0 :(得分:2)

查看comm命令,该命令可用于逐行比较两个已排序的文件。

例如:

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

第一列包含file1唯一的行,第二列包含两个文件共有的行。

答案 1 :(得分: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