다음 임의 파일의 명령은 다음과 같습니다.페이스트빈:
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
매뉴얼 페이지에는 이 -u
플래그의 기능이 명확하지 않습니다. 어떤 제안이 있으십니까?
답변1
uniq
with는 -u
중복된 행을 건너뜁니다. 그러므로:
$ printf "%s\n" 1 1 2 3 | uniq
1
2
3
$ printf "%s\n" 1 1 2 3 | uniq -u
2
3
일반적으로 uniq
행은 최대 한 번 인쇄됩니다(입력이 정렬되어 있다고 가정). 이 옵션은 실제로 실제 줄을 인쇄합니다.고유한(다시 나타나지 않았습니다).
답변2
간결한 버전:
uniq
, 없이-u
, 각 행을 만듭니다.산출고유한.uniq -u
모든 고유 라인만 인쇄입력에서.
약간 더 긴 버전:
uniq
반복되는 줄이 있는 파일을 처리하는 데 사용되며 이러한 줄이 입력에 연속적으로 나타나는 경우에만 사용됩니다. 그러므로 그 목적을 위해,고유한행은 즉시 복사되지 않는 행입니다.
( uniq
단기 기억은 매우 제한적입니다. 이전 줄이 아닌 한 입력에 이전 줄이 나타났는지 여부를 결코 기억하지 않습니다. 이것이 바로 uniq
와 자주 쌍을 이루는 이유입니다 sort
.)
일련의 반복되는 줄이 나타나면 매개변수 uniq
없이 -u
인쇄됩니다.하나라인의 사본. (각 출력 라인을 만듭니다.고유한).
매개변수를 전달하면 -u
인쇄됩니다.영라인 사본 - 중복 실행은 출력에서 생략됩니다.
답변3
고유 POSIX 사양매우 명확하게 설명되어 있습니다.
-u
Suppress the writing of lines that are repeated in the input.
-u
make 옵션은 uniq
중복된 행을 인쇄하지 않습니다.
대부분의 uniq
구현에서는 바이트 비교를 사용하는 반면 GNU는 uniq
데이터 정렬을 사용하여 중복 행을 필터링합니다. 따라서 en_US.UTF-8
다음과 같은 일부 로케일에서는 잘못된 결과가 발생할 수 있습니다.
$ printf '%b\n' '\U2460' '\U2461' | uniq
①
어떤 줄도 제공 되지 -u
않습니다.
$ printf '%b\n' '\U2460' '\U2461' | uniq -u
<blank>
따라서 C
바이트 비교를 수행하려면 로케일을 설정해야 합니다.
$ printf '%b\n' '\U2460' '\U2461' | LC_ALL=C uniq
①
②
답변4
정상:
echo "a b a b c c c" | tr ' ' '\n'
a
b
a
b
c
c
c
uniq: 두 개의 연속된 중복 행이 없습니다.
echo "a b a b c c c" | tr ' ' '\n' | uniq
a
b
a
b
c
정렬됨
echo "a b a b c c c" | tr ' ' '\n' | sort
a
a
b
b
c
c
c
sort -u: 두 행이 반복되지 않습니다.
echo "a b a b c c c" | tr ' ' '\n' | sort -u
a
b
c
정렬/고유성: 모두 다름
echo "a b a b c c c" | tr ' ' '\n' | sort | uniq
a
b
c
별개의 발생 횟수 계산
echo "a b a b c c c" | tr ' ' '\n' | sort | uniq -c
2 a
2 b
3 c
고유한 행만(먼저 정렬하지 않음)
echo "a b a b c c c" | tr ' ' '\n' | uniq -u
a
b
a
b
고유한 행만(정렬 후)
echo "a b a b c c c Z" | tr ' ' '\n' | sort | uniq -u
Z
uniq -d : 그룹당 하나씩 중복된 줄만 인쇄합니다.
echo "a b a b c c c" | tr ' ' '\n' | uniq -d
c
..괜찮아요
echo "a b a b c c c" | tr ' ' '\n' | uniq -dc
3 c