如何在文件夹内的多个文件中查找重复行

如何在文件夹内的多个文件中查找重复行

当我想查找两个文件之间的重复行时,我使用此命令

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

相关内容