フォルダ内の複数のファイルで重複した行を見つける方法

フォルダ内の複数のファイルで重複した行を見つける方法

2つのファイル間の重複行を探したい場合は、このコマンドを使用してください。

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

おすすめ記事