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
。