2014-10-08 2 views
0

좋은 날,BASH, 정렬없이 중복 인쇄

정렬없이 파일에서 반복되는 단어 만 인쇄하는 방법을 궁금합니다.

awk의 반대 위치는 awk '!x[$0]++'입니다. 다른 방법이 있습니까?

미리 감사드립니다.

예상 입력 당신이 당신의 awk 문을 보면, 당신이 !와 인쇄 조건을 부정 것을 볼 수 있습니다

a 
w 

답변

4

a 
b 
a 
c 
d 
e 
f 
w 
g 
w 
h 

예상 출력. 단지를 제거하고 대신 중복 인쇄 해드립니다 :

awk 'x[$0]++' 

가 다시 나타날 경우에도 그냥 중복 당 하나 개의 라인을 인쇄하려면 :

단어가 한 줄에 한 단어에있는 경우
awk 'x[$0]++ == 1' 
0

(또는 한 문장 "단어")

uniq -d YourFile 

경우 멀티 워드 1 등

tr " " "\n" YourFile | uniq -d 
+2

'uniq -d'는 필요한 결과만을 생성합니다 ** ** 파일이 처음으로 정렬되면 __unless__ 결과가 연속 된 행에 우연히 일치합니다. – potong

+0

맞습니다. 우선 sort -u를 사용하여 파일을 정렬하는 것을 잊었습니다. 이제 문제는 "shoud/could"이 파일을 일종의 방식으로 수정하는 것입니다. 그렇지 않은 경우, 단어를 인쇄해야하는 위치 (첫 번째 또는 마지막 항목 주문) – NeronLeVelu

1

당신 (GNU이 나오지도)에 대한이 작동 될 수 있습니다

sed -rn 'G;h;/^(\S+).*\1/P' file 

이 파일에서 발생 (이 경우 단일 문자에) 현재 행의 중복을 인쇄하는 역 참조를 사용합니다.

sed -rn 'G;h;/^(\S+).*\1/!b;/^(\S+).*\1.*\1/b;P' file 

이 옵션은 파일에서 현재 행 (이 경우 하나의 문자)이 하나만 나오는 경우에만 인쇄하기 위해 역 참조를 사용합니다.