2013-02-23 1 views
2

두 개의 열이있는 데이터 목록에서 고유하고 중복 된 데이터를 찾으려고합니다. 나는 정말 (탭으로 구분)과 같을 수 있습니다 열에서 1"sort -f | uniq -i"명령을 함께 사용하여 대소 문자를 무시합니다.

데이터를 데이터를 비교하려면 :

What are you doing?  Che cosa stai facendo? 
WHAT ARE YOU DOING?  Che diavolo stai facendo? 
what are you doing?  Qual è il tuo problema amico? 

그래서 나는 주변에 연주 된 다음

    (그냥 "종류", 아니 -f 옵션)의 경우 을 무시하지 않고이 나에게주는 작은 중복

    둔한 '{FS는 = "\ T는"정렬

  1. ; print $ 1} 'EN-IT_Corpus.txt | 정렬 | UNIQ -i -D>가

    둔한 '{FS = \ "를 t"를 내게 준다 이상의 중복 ("정렬 -f') 경우를 무시하여 정리

  2. 속는; print $ 1} 'EN-IT_Corpus.txt | sort -f | UNIQ는 -i -D>는

내가 잘 # 2는 그것이 첫 번째 경우를 무시 정렬 때문에이 사건을 무시하고 중복을 찾으려면 더 정확하다고 생각하는 건가요 속는 후 정렬 된 데이터를 기반으로 중복 발견 ?

sort는 중복 표시 옵션이 없기 때문에 정렬과 고유 명령을 결합 할 수 없습니다.

감사합니다, 스티브

+1

를 복제 무엇입니까 샘플 데이터에서 원하는 출력? –

답변

4

나는 키가 전처리에 데이터 생각 :

file="EN-IT_Corpus.txt" 
dups="dupes.$$" 
sed 's/  .*//' $file | sort -f | uniq -i -D > $dups 
fgrep -i -f $dups $file 

sed 명령은 단지 영어 단어를 생성 이것들은 대소 문자를 구분하지 않고 uniq을 통해 대소 문자를 구분하지 않고 중복 된 항목 만 인쇄합니다. 그런 다음 fgrep 또는 grep -F으로 복제 된 키를 찾고 데이터 파일을 다시 처리하고 -f $dups 파일에서 찾을 패턴을 지정하십시오. 분명히 (나는 희망한다) sed 명령의 큰 공백은 탭이다; 쉘에 따라 \t을 쓰고 sed 등등을 쓸 수 있습니다.

sed 's/  .*//' $file | 
sort -f | 
uniq -i -D | 
fgrep -i -f - $file 

을 그리고 중복의 수는 정말 큰 경우, 당신은 그들을 아래로 압착 할 수 있습니다 :

사실, GNU grep, 당신은 할 수있는 입력 데이터 감안할 때

sed 's/  .*//' $file | 
sort -f | 
uniq -i -D | 
sort -f -u | 
fgrep -i -f - $file 

:

What a surprise?  Vous etes surpris? 
What are you doing?  Che cosa stai facendo? 
WHAT ARE YOU DOING?  Che diavolo stai facendo? 
Provacation   Provacatore 
what are you doing?  Qual è il tuo problema amico? 
Ambiguous  Ambiguere 

이들 모두의 출력은 :

,
What are you doing?  Che cosa stai facendo? 
WHAT ARE YOU DOING?  Che diavolo stai facendo? 
what are you doing?  Qual è il tuo problema amico? 
2

나이 :

독특한 :

awk '!arr[tolower($1)]++' inputfile > unique.txt 

awk '{arr[tolower($1)]++; next} 
END{for (i in arr {if(arr[i]>1){print i, "count:", arr[i]}} }' inputfile > dup.txt 
관련 문제