독특한 라인 찾기


90

고유 한 줄을 찾고 파일에서 모든 중복을 제거하려면 어떻게해야합니까? 내 입력 파일은

1
1
2
3
5
5
7
7

결과는 다음과 같습니다.

2
3

sort file | uniq일을하지 않을 것입니다. 모든 값을 한 번 표시합니다.


17
파일을 먼저 정렬해야합니다. sort file | uniq -u콘솔에 출력됩니다.
ma77c

그 이유 sort file | uniq는 모든 값을 1 번 표시 하는 이유 는 처음 만난 줄을 즉시 인쇄하고 이후의 만남에서는 건너 뛰기 때문이라고 생각합니다.
Reeshabh Ranjan

답변:



28

다음과 같이 사용하십시오.

sort < filea | uniq > fileb

2
이것은 정확하지, 난 당신이 의미 생각 :uniq -u filea > fileb
크리스 시모어

1
나는 귀하의 데이터를 복사하고 실행하면 작동합니다 sort<filea.txt | uniq>fileb.txt. 확장 기능을 생략했을 수도 있습니다. 나는 당신이에서 가야 맥 OS X를 사용하고 filea.txt다른에fileb.txt
kasavbere

이와 함께 리디렉션에 대한 필요가 없습니다 sort과에 배관의 지점 무엇 uniq당신은 그냥 할 수있을 때 sort -u file -o file중복 값이 즉 당신이 제거되는 일을하는지 fileb포함 1,2,3,5,7영업 인 경우에만 고유 라인 원 2,3에 의해 달성되는 uniq -u file파일 확장자는 아무 상관이 그것으로, 당신의 대답은 잘못되었습니다.
Chris Seymour 2012

12

당신은 또한 사용 "파일"의 고유 한 값을 출력 할 수 있습니다 cat에 파이프하여 명령을 sort하고uniq

cat file | sort | uniq -u


9

uniq -u는 작동하지 않았기 때문에 나를 미치게 만들었습니다.

그래서 그 대신 파이썬이 있다면 (대부분의 Linux 배포판과 서버에는 이미 있습니다) :

notUnique.txt에 데이터 파일이 있다고 가정합니다.

#Python
#Assuming file has data on different lines
#Otherwise fix split() accordingly.

uniqueData = []
fileData = open('notUnique.txt').read().split('\n')

for i in fileData:
  if i.strip()!='':
    uniqueData.append(i)

print uniqueData

###Another option (less keystrokes):
set(open('notUnique.txt').read().split('\n'))

빈 줄로 인해 최종 집합에는 ''또는 공백 만 포함 된 문자열이 포함될 수 있습니다. 나중에 제거 할 수 있습니다. 또는 터미널에서 복사하는 것만으로도 충분하지 않습니다.)

#

참고로 uniq Man 페이지에서 :

"참고 : 'uniq'는 인접하지 않는 한 반복되는 줄을 감지하지 않습니다. 먼저 입력을 정렬하거나 'uniq'없이 'sort -u'를 사용할 수 있습니다. 또한 비교는 'LC_COLLATE'에 지정된 규칙을 따릅니다."

다음을 호출하는 올바른 방법 중 하나 : # sort nonUnique.txt | 유니크

실행 예 :

$ cat x
3
1
2
2
2
3
1
3

$ uniq x
3
1
2
3
1
3

$ uniq -u x
3
1
3
1
3

$ sort x | uniq
1
2
3

공백이 인쇄 될 수 있으므로 준비하십시오!


3
이것은 과잉입니다.
SmallChess

9

동안 sort(N (n)이 로그) 시간이 O 소요, 내가 사용하는 것을 선호

awk '!seen[$0]++'

awk '!seen[$0]++'awk '!seen[$0]++ {print}', print line (= $ 0) 의 약어입니다 seen[$0]. 더 많은 공간이 필요하지만 O (n) 시간 만 걸립니다.


7

당신이 사용할 수있는:

sort data.txt| uniq -u

이 정렬 데이터 및 고유 값으로 필터링



3

uniq어떤 이유로 파일을 정렬 할 수없는 경우 다음을 사용할 수 있습니다 awk.

awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'


3
sort -d "file name" | uniq -u

이것은 비슷한 것을 위해 나를 위해 일했습니다. 배열되지 않은 경우 사용하십시오. 정렬 된 경우 정렬을 제거 할 수 있습니다.


3

나는 이것이 더 쉽다는 것을 안다.

sort -u input_filename > output_filename

-u 고유함을 의미합니다.


0

이것은 내가 시도한 첫 번째였습니다.

skilla:~# uniq -u all.sorted  

76679787
76679787 
76794979
76794979 
76869286
76869286 
......

cat -e all.sorted 후

skilla:~# cat -e all.sorted 
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $

두 번째 줄마다 후행 공백이 있습니다 :( 모든 후행 공백을 제거한 후 작동했습니다!

감사합니다

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