Grep 没有重复项?

Grep 没有重复项?

我在同一文件夹中的不同文件中对文本文件进行了多个修订。

我怎么能够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

将结果通过管道传送到 sort 以过滤重复项。

grep -re pattern files and dirs ... | sort -ut: -k2

sort的-t:-k2选项将导致它在进行排序和合并时忽略文件名。

或者,如果您不需要文件名,只需:

grep -hre pattern files and dirs ... | sort -u 

相关内容