2016-11-28 1 views
0

하나의 폴더에 미정의 csv 파일 수가 있습니다. 모든 CSV는 다음과 같이 행 개의 다른 번호를 하나의 열이 있습니다여러 CSV 파일간에 일치하는 항목을 찾으십시오

File1.csv을

rs1000 
rs2000 
rs4000 
rs5000 
... 

내가 그 폴더와 CSV 만 행이 파일 출력에있는 모든 CSV 파일을 비교하려면 모든 파일에서 공통입니다. 나는이 명령이 :

awk -F'|' 'NR==FNR{c[$1$2]++;next};c[$1$2] > 0' *.csv > out_p.csv 

을하지만, 모든 파일에없는 행을 보여줍니다.

+0

A가 [mcve] 우리가 테스트 할 수 있습니다 주시기 바랍니다가 없다고 가정! – fedorqui

답변

1

나는 테스트하지 않았지만 제대로 작동 할 것입니다.

awk '{line[$0]++}END{for(x in line)if(line[x]==ARGC-1)print x} *.csv 
  • 원 라이너
  • 의 값 (발생)
  • 마지막 *.csv의 카운트와 동일한 경우를 갖는 선 출력 할 때마다 증가 해시 테이블 (AWK 배열)로 모든 라인을 읽어 파일.
  • 참고 각 CSV 파일이 중복 된 라인
+0

ARGC-1의 기능은 무엇입니까? – dood

+0

@dood 파일 수입니다. man 페이지 pls를 확인하십시오. – Kent

+0

완벽하게 작동합니다. 감사합니다. –

0

이 같은 것을보십시오 : 그것은 모든 CSV 파일에 두 번 이상 존재하는 경우는 필드 구분 기호를 지정할 필요가 없습니다

awk '{ array[$1]++ } END { for(i in array) { if(array[i] > 1) print i } }' *.txt 

각 csv 파일이 하나의 열이, 선이 인쇄되어 있습니다 .

+0

모든 파일에서 공통적으로 사용되지 않는 행을 표시합니다. –

+0

@ BorjaLeón Ah, 행은 모든 파일에 있어야합니다. 이 경우 파일 수를 계산하고 그 수를 if 문에 사용 된 1로 대체하십시오. – dood

관련 문제