Linux
如何在文件夾內的多個文件中找到重複的行
當我想查找兩個文件之間的重複行時,我使用此命令
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; }'
您可以這樣做(如果文件名稱中沒有製表符):
grep -T -r . mainfolder | sort -k 2 | uniq -D -f 1
遞歸
grep
將輸出以其所在文件名為前綴的每一行。然後根據除第一個欄位之外的所有欄位進行排序。最後uniq
只輸出重複的行,跳過第一個欄位。
find
您可以通過使案例如或--include
and--exclude
grep
標誌對進入排序的文件進行更多控制。