파일을 정렬하고 싶지 않고 원래 순서를 유지하면서 중복된 줄을 필터링하면 됩니다. 정렬 기능 없이 정렬의 고유한 기능을 사용할 수 있는 방법이 있습니까( 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
간단히 말해서:
- 정렬하지 않고 중복 항목을 탐욕스럽게 필터링하는 방법은 무엇입니까?
- 왜
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입니다).