sort
및 조합 외에 고유한 줄을 인쇄하는 더 나은 솔루션이 있습니까 uniq
?
답변1
모든 동일한 줄만 순서에 관계없이 인쇄하려면 다음을 수행하세요.
sort -u
순서에 상관없이 고유한 줄만 인쇄하려면 다음을 수행하세요.
sort | uniq -u
각 동일한 줄을 처음 발생 순서대로 한 번만 인쇄하려면: (각 줄에 대해 아직 표시되지 않은 경우 줄을 인쇄한 다음 어떤 경우든 표시된 카운터를 증가시킵니다.)
awk '!seen[$0] {print}
{++seen[$0]}'
처음 발생한 순서대로 고유한 행만 인쇄하려면: (각 행을 에 기록하고 seen
, lines
첫 번째 발생인 경우에도 기록합니다. 입력이 끝나면 나타나는 순서대로 행을 인쇄하지만 행을 한 번 본 행만 인쇄합니다. )
awk '!seen[$0]++ {lines[i++]=$0}
END {for (i in lines) if (seen[lines[i]]==1) print lines[i]}'
답변2
일부(대부분?) 버전에는 해당 부분을 직접 실행하는 플래그가 sort
있습니다 . 그러나 구현에 따라 일부 줄 길이 제한이 있을 수 있지만 이미 일반 제한이 있습니다 .-u
uniq
sort|uniq
답변3
답변에 언급된 마지막 부분은 다음과 같습니다.고유한 라인 인쇄@Gilles 이 질문에 대한 답으로 두 개의 해시를 사용할 필요를 없애려고 노력하고 있습니다.
이 솔루션은 작동합니다. 처음 나타나는 순서대로 고유한 줄만 인쇄합니다.
awk '{counter[$0]++} END {for (line in counter) if (counter[line]==1) print line}'
여기서 "카운터"는 이전에 처리된 행과 유사한 각 행의 개수를 저장합니다.
마지막으로 카운터 값이 1인 줄만 인쇄합니다.
답변4
Perl이 당신에게 적합합니까? 중복 항목이 인접하지 않은 경우에도 행의 원래 순서를 유지합니다. Python이나 awk
.
while (<>) {
print if $lines{$_}++ == 0;
}
로 단축될 수 있다
perl -ne 'print unless $lines{$_}++;'
주어진 입력 파일:
abc
def
abc
ghi
abc
def
abc
ghi
jkl
다음과 같은 출력이 생성됩니다.
abc
def
ghi
jkl