2010-07-30 9 views
0

이 CSV 단 하나 개의 열을 포함하는 파일의 차이를 확인하는 방법 :csv 파일과 내가이 보이는 일부 사용자 데이터를 포함하는 CSV 파일이

"10333","","an.10","Kenyata","","Aaron","","","","","","","","","","" 
"12222","","an.4","Wendy","","Aaron","","","","","","","","","","" 
"14343","","aaron.5","Nanci","","Aaron","","","","","","","","","","" 

나는 또한이 파일이

an.10 
arron.5 

내가 원하는 것은 목록 파일에 포함 된 CSV 파일의 행만 찾는 것입니다.

그래서 원하는 출력은 다음과 같습니다

"10333","","an.10","Kenyata","","Aaron","","","","","","","","","","" 
"14343","","aaron.5","Nanci","","Aaron","","","","","","","","","","" 

(an.4이 새 목록에 포함되지 않은 방법을 참고.)

를 내가 나에게 사용할 수있는 환경을 가지고 단지에 대한 시도 기꺼이 이 csv에는 수백만 개의 레코드가 들어 있으므로 수동으로 수행하는 것 외에는 목록 자체에 약 100,000 개의 항목이 있습니다.

+0

내 FOSS 도구 CSVfix에서보세요 http://code.google.com/p/csvfix/ - 특히 join 명령. –

+0

어떤 운영 체제입니까? Excel을 사용할 수 있습니까? 프로그래밍 솔루션을 원하십니까? grep과 같은 도구를 사용할 수 있습니까? – Frank

+0

저는 fedora 12를 실행하고 리눅스 박스와 윈도우즈 VM을 가지고 있습니다. Grep, sed, diff, 모두 사용할 수 있습니다. 필자는 CLI 솔루션을 선호하지만 perl이나 다른 어떤 것에 열려 있습니다. – Chris

답변

1

식별자가 얼마나 고유합니까? an.10 등은 무엇입니까?

는 어쩌면 아주 작은 *의 X 쉘 스크립트는 충분하다 :
for i in $(uniq list.txt); do grep "\"$i\"" data.csv; done 

이 목록의 모든 고유 항목, CSV 파일에 일치하는 모든 행을 반환합니다 그. 그러나 두 번째 열에서만 독점적으로 일치하지는 않습니다. ,

+0

그들은 고유 할 수 있습니다. :-) – Chris

+1

파일 이름 선택에서 무서운 우연의 일치가 있습니다! 하지만 코드는 작동하지 않을 것입니다. $ "list.txt"라는 하나의 값만 있습니다. –

+0

사실. 나는 교정했다. :) – relet

1

CSV 파일 data.csv하고 목록 파일이 List.txt 파일 인 경우 (즉, 예를 들어 awk와 함께 할 수있는) 내가 이런 짓을 했을까 :

for i in `cat list.txt`; do grep $i data.csv; done 
+0

메신저가 중복 된 것으로 끝나나요? – Chris

+0

목록에 중복 된 것이 있습니까? 이것을 제거하기위한 빠른 수정을 원한다면'| uniq'를 통해 목록이나 결과를 파이프하십시오 – relet

관련 문제