Sort -u 정렬하지 않지만 더 나은 고유성을 가지나요? [복사]

Sort -u 정렬하지 않지만 더 나은 고유성을 가지나요? [복사]

파일을 정렬하고 싶지 않고 원래 순서를 유지하면서 중복된 줄을 필터링하면 됩니다. 정렬 기능 없이 정렬의 고유한 기능을 사용할 수 있는 방법이 있습니까( cat -u존재한다면 비슷한 기능을 제공할 것임)? 인접한 줄만 보기 때문에 uniq없이 그냥 사용하는 것은 sort의미가 없으므로 먼저 파일을 정렬해야 합니다.uniq

uniq그런데 와 의 차이점은 정확히 무엇인가요 uniq --unique? Pastebin의 임의 파일에 대한 명령은 다음과 같습니다.

wget -qO - http://pastebin.com/0cSPs9LR | wc -l
350
wget -qO - http://pastebin.com/0cSPs9LR | sort -u | wc -l
287
wget -qO - http://pastebin.com/0cSPs9LR | sort | uniq | wc -l
287
wget -qO - http://pastebin.com/0cSPs9LR | sort | uniq -u | wc -l
258

간단히 말해서:

  1. 정렬하지 않고 중복 항목을 탐욕스럽게 필터링하는 방법은 무엇입니까?
  2. uniq충분히 독특하지 않습니까 uniq --unique?

p.s. 이 질문은 다음 질문과 중복되는 것처럼 보이지만 그렇지 않습니다.

답변1

저는 Perl과 Hashing을 사용하겠습니다.

그것은 다음과 같습니다:

 #!/usr/bin/perl

 use strict;
 use warnings;

 my %seen; 

 while ( <> ) { 
     print unless $seen{$_}++; 
 }

나는 이것이 다음과 같이 간단하게 이해될 수 있다고 생각한다.

perl -ne 'print unless $seen{$_}++' data.txt

(또는 고양이 데이터가 들어갑니다).

이는 고유한 전체 행을 얻는 데 효과적입니다. 분할 또는 정규식을 사용하여 하위 집합을 비교할 수도 있습니다.

예를 들어

while ( <> ) { 
    my @fields = split ( ";" ); 
    print unless $seen{$fields[4]}++; 
}

행은 기준으로 필드로 분할되며 ;5번째 필드만 비교됩니다(배열의 첫 번째 필드는 0입니다).

관련 정보