텍스트 파일에서 중복 값만 인쇄하는 방법은 무엇입니까?


69

다음과 같은 숫자 값 열이 있다고 가정하십시오.

파일 1 :

1 
2
3
3
3
4
4
4
5
6

출력을 원합니다.

3  
4

즉, 반복되는 선만입니다. Linux에서 이것을 찾을 수있는 명령 줄 도구가 있습니까? (NB : 값이 숫자로 정렬 됨).


3
참조하십시오 man uniq.
jasonwryan

관련, 더 어려운 질문 :
와일드 카드

답변:


118

uniq(1)이것을 위해 사용할 수 있습니다 :

uniq -d file.txt

사본 만 인쇄합니다. 입력 파일은 모든 중복 항목이 연속적인 것으로 보이도록 정렬해야하므로 정렬되지 않은 경우 먼저 정렬을 통해 실행하십시오.


1
3 부만 인쇄하려면 어떻게해야합니까?
MiNdFrEaK

8
sort | uniq -c | grep '^\s*3\s' | sed 's/^\s*[0-9]*\s*//'3 중의 경우 @MiNdFrEaK ; N- 접근에 대해 "3"을 N으로 대체
full.stack.ex 8:22에

@MiNdFrEaK sort | uniq -c | sed -n 's/^[[:blank:]]*3[[:blank:]]\{1,\}//p'삼중 위해

@ camh csv 파일 에서도이 작업을 수행 할 수 있습니까? 특정 열의 값만?
NumenorForLife 2016 년

1
file.txt 정렬 | uniq -d
ron

1

사용 uniq하여 awk:

cat File1  | uniq -c | awk '$1 > 1 { print $2 }'

6
이 작품이지만 왜 출력을 파이프 cat합니까?
Bernhard

1
모든 사람이 당신이 할 수 uniq -c File1있고 다른 많은 도구를 사용하여 비슷하게 알고있는 것은 아닙니다 . 아마 여기서 일어나고있는 것입니다.
Matthias

1

이것을 실행하십시오 : perl -ne 'print if $a{$_}++' filename.txt


그것은 3\n3\n4\n\4n분명히 File1 입력을 제공 합니다.
yaegashi

내가 다시 찾은 perl snip은 각 라인의 발생 횟수를 제공하므로 필요에 따라 파이프, 정렬 및 필터링 할 수 있습니다. perl -ne '$ a {$ _} ++; END {while (($ k, $ v) = 각 % a) {printf "% d \ t % s", $ v, $ k}} '파일 이름
Theophrastus

주어진 필드 구분 기호로 구분 된 특정 열에서 그렇게하는 방법이 있습니까?
Geremia

yaegashi가 지적했듯이, 요구 사항을 충족시키기 위해 작은 수정이 필요합니다. perl -ne 'print if 1 == $ a {$ _} ++'filename.txt 모든 데이터를 전체 정렬로 사전 처리해야합니다. 이 답변은 출력 결과를보다 빠르고 효율적으로 시작합니다.
BOC

0

uniq 목록을 주문해야하며 기본값을 알파벳순으로 정렬

sort | uniq -d path/to/your/filename

또는

cat fileName | sort | uniq -d path/to/your/filename

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.