2013-03-18 4 views
1

파일 집합, 답변 파일 수, 결과 파일 수가 적은 경우 각 결과 파일을 답변과 비교해야하지만 결과 파일의 번호가 같지 않거나 행.서로 다른 행 수를 가진 원본 파일과 파일을 비교하는 경우

응답 파일

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

결과 1

q1, true 
q2, false 
q3, true 

표 데이터가 일치 한 후 그 다른 하나는 0과 경우를 수행 그렇다면

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

을하고 싶습니다 행이 존재하지 않습니다. 다시 0으로 간주하십시오. 결과 폴더의 모든 파일에 대해 동일한 작업이 수행되어야합니다.

는 지금까지 시도 일 : 정답 만

를 인쇄 및 결과에 대한 데이터는 다음과 같이하면 할 수있는 기회가 같은이

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

를?

결과

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

당신은 우리가 당신의 숙제를 수행 할 작업을? =) –

+0

@ 75inchpianist : 지금까지 awk -F, "{print $ 0}"answer.csv | grep -f - result01.csv> 올바른 asnwers를 인쇄하는 me.csv' –

+0

질문에 항상 검색을 넣으십시오. –

답변

2

대답 a 파일에 대한 결과 파일 r 비교 awk 사용 :

$ 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"로 "r"을 재생하려 할 때 –

+1

확장자'.csv'와'-F "를 사용하여 나중에 추가 한 시도에서 실제 파일이 게시 된 것과 다릅니다. * eg *'q1, true' **가 아닌''q1 true' !? –

+0

이것은 현재 작동하지만, awk FNR == NR {r [$ 1] = $ 2; 다음} $ 1 {print $ 1, r [$ 1] == $ 2? 1 : 0} 다음 {print $ 1,0} 'result01.csv answer.csv> me01.csv' –

2

1 라인으로 두 개의 정렬 된 파일 라인을 비교하는 데 사용할 수있는 comm 명령을 살펴보십시오. 예를 들어

:

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

첫 번째 열 file1에 특유 라인을 포함하고, 두 번째 열은 모두 파일에 공통 라인을 포함한다.

+0

원하는 출력을 얻으려면'awk '{print $ 1,/^ [[: space :]] /}'' –