파일에서 두 줄이 같은지 확인할 수있는 유닉스 명령이 있습니까?
예를 들어 파일을 고려하십시오 sentences.txt
This is sentence X
This is sentence Y
This is sentence Z
This is sentence X
This is sentence A
This is sentence B
우리는 그 문장이
This is sentence X
반복됩니다.
이것을 빨리 감지 할 수있는 명령이 있습니까? 그래서 아마도 다음과 같이 실행할 수 있습니다-
$ cat sentences.txt | thecommand
Line 1:This is sentence X
Line 4:This is sentence X
답변
원하는 정확한 출력을 얻는 방법은 다음과 같습니다.
$ grep -nFx "$(sort sentences.txt | uniq -d)" sentences.txt
1:This is sentence X
4:This is sentence X
설명:
내부 $(sort sentences.txt | uniq -d)
에는 두 번 이상 나타나는 각 줄이 나열됩니다. 바깥 쪽 grep -nFx
은 이 줄들 과 sentences.txt
정확히 -x
일치하는 줄을 다시 찾고 -F
줄 번호 앞에 붙습니다.-n
답변
정확히 원하는 것은 아니지만 결합 sort
하고 시도해 볼 수 있습니다 uniq -c -d
.
aularon@aularon-laptop:~$ cat input
This is sentence X
This is sentence Y
This is sentence Z
This is sentence X
This is sentence A
This is sentence B
aularon@aularon-laptop:~$ sort input | uniq -cd
2 This is sentence X
aularon@aularon-laptop:~$
2
다음은 해당 라인에서 찾은 중복 수입니다 man uniq
.
-c, --count
prefix lines by the number of occurrences
-d, --repeated
only print duplicate lines
답변
파일 내용이 메모리에 적합 awk
하면 이것에 적합합니다. comp.lang.awk의 표준 one-liner (이 컴퓨터에서 인스턴스를 검색 할 수는 없지만 매월 몇 개가 있습니다)는 중복이 awk 'n[$0]++'
있는지 감지하기 위해 각 줄 값의 발생 횟수를 계산하고 발생을 인쇄합니다. 기본 조치는 print $0
입니다.
첫 번째를 포함하여 모든 발생을 형식으로 표시하지만 둘 이상의 값이 복제 될 때 혼합 순서로 표시하려면 조금 더 까다 롭습니다.
awk <sentences.txt ' !($0 in n) {n[$0]=NR;next} \
n[$0] {n[$0]=0; print "Line "n[$0]":"$0} \
{print "Line "NR":"$0} '
명확성을 위해 여러 줄로 표시되면 일반적으로 실제로 사용됩니다. 이 작업을 자주 수행하면 awk
을 사용하여 파일에 스크립트를 넣거나 awk -f
셸 스크립트에 전체를 넣을 수 있습니다 . 가장 간단한 awk
것처럼 이것은와 매우 유사하게 수행 할 수 있습니다 perl -n[a]
.