comparer des fichiers avec le fichier original avec un nombre différent de lignes

J’ai un ensemble de fichiers, un fichier de réponses et quelques fichiers de résultats. Je dois comparer chaque fichier de résultats avec les réponses, mais les fichiers de résultats peuvent ne pas avoir le même nombre ou les mêmes lignes.

fichier de réponse

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

résultats 1

 q1, true q2, false q3, true 

table que j’aimerais avoir

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

par conséquent, si les données correspondent, leur valeur 1 correspond à 0 et si la ligne n’existe pas, considérez-la de nouveau – la même action devrait se produire pour tous les fichiers du dossier de résultats.

Ce que j’ai essayé jusqu’à présent:

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

qui imprime seulement les bonnes réponses

et y a-t-il une chance de faire la même chose si les données pour les résultats ressemblent à ce qui suit?

résultats 1

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

Utiliser awk pour comparer le fichier de résultats avec la réponse à a fichier:

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

Jetez un coup d’oeil à la commande comm qui peut être utilisée pour comparer deux fichiers sortingés ligne par ligne.

Par exemple:

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

La première colonne contient des lignes uniques à fichier1 et la deuxième colonne contient des lignes communes aux deux fichiers.