폴더 내 여러 파일에서 중복된 줄을 찾는 방법

폴더 내 여러 파일에서 중복된 줄을 찾는 방법

두 파일 사이의 중복된 줄을 찾고 싶을 때 이 명령을 사용합니다.

comm -12 <(sort file1.txt) <(sort file2.txt)

또는

sort file1.txt file2.txt | awk 'dup[$0]++ == 1'

하지만 폴더 내의 여러 파일에서 중복된 줄을 어떻게 찾을 수 있습니까? 예:

mainfolder
  folder1
    file1-1.txt
    file1-2.txt
    etc
  folder2
    file2-1.txt
    file2-2.txt
    etc

그리고 터미널의 결과는 파일별로 표시됩니다(즉, 모든 파일에서 해당 줄이 반복되지만 이를 포함하는 파일이 지정됨). 문제의 원인을 이해할 수 있습니다.

PD: 노력했어요이 명령이건 나한테는 안 맞는다

file_expr="*.txt"; sort $file_expr | sed 's/^\s*//; s/\s*$//; /^\s*$/d' | uniq -d | while read dup_line; do grep -Hn "^\s*$dup_line\s*$" $file_expr; done| sort -t: -k3 -k1,2 | awk -F: '{ file=$1; line=$2; $1=$2=""; gsub(/(^[ \t]+)|([ \t]+$)/,"",$0); if (prev != "" && prev != $0) printf ("\n"); printf ("\033[0;33m%s (line %s)\033[0m: %s\n", file, line, $0); prev=$0; }'

답변1

다음과 같이 할 수 있습니다(파일 이름에 탭 문자가 없는 경우).

grep -T -r . mainfolder | sort -k 2 | uniq -D -f 1

재귀는 grep포함된 파일 이름이 앞에 붙은 각 줄을 출력합니다. 그런 다음 첫 번째 필드를 제외한 모든 필드를 기준으로 정렬합니다. 마지막으로 uniq첫 번째 필드를 건너뛰고 중복 행만 출력됩니다.

find--include, 또는 및 플래그(예: )를 사용하여 정렬되는 파일을 더 효과적으로 제어 할 수 있습니다 --exclude grep.

관련 정보