Linux

如何在文件夾內的多個文件中找到重複的行

  • June 16, 2021

當我想查找兩個文件之間的重複行時,我使用此命令

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您可以通過使案例如或--includeand--exclude grep標誌對進入排序的文件進行更多控制。

引用自:https://unix.stackexchange.com/questions/654532