同じフォルダ内の複数のファイルに、テキストファイルの複数のリビジョンがあります。
どうやってできるかgrep
フォルダ内のどのファイルにも同じテキストを含む重複行がリストされていませんか?
答え1
どうですか?
cat * | grep exampletext | sort -u
答え2
私は使用する:
grep -h test files* | puniq
puniq
例:perl -ne '$seen{$_}++ or print;'
同様sort -u
ですが、入力を並べ替えるのではなく、実行時に出力を提供します。
ファイル名が必要で、各ファイルの重複行を避ける場合:
parallel --tag --lb 'grep string {} | puniq' ::: files*
ファイル名が必要であり、どのファイルでも重複した行を望まない場合(ファイル名にTAB(\ t)を含めないでください):
parallel --tag --lb grep string {} ::: files* |
perl -ne '/^[^\t]+(.*)/ and $seen{$1}++ or print;'
答え3
おそらくこのようなものはあなたの想像に近いかもしれません(gnu awkで使用):
cat file1
1
2
3
22
cat file11
1
2
3
8
9
cat file111
1
2
3
5
6
awk '{seen[$0]++;fname[$0]=FILENAME};END{for (k in seen) {if (seen[k]==1) print fname[k],":",k}}' file1*
file111 : 5
file111 : 6
file11 : 8
file11 : 9
file1 : 22
答え4
結果をパイプして並べ替えて重複項目をフィルタリングします。
grep -re pattern files and dirs ... | sort -ut: -k2
sortのと-t:
オプションを-k2
使用すると、ソートとマージを実行するときにファイル名を無視します。
または、ファイル名が不要な場合は、次のようにします。
grep -hre pattern files and dirs ... | sort -u