grep允许重复搜索吗?

grep允许重复搜索吗?,grep,duplicates,search,Grep,Duplicates,Search,我有很多(接近100个)大csv文件,第一列中有sellID。我知道一些sellID在2个或更多文件中重复了2次或更多次。是否可以使用grep查找所有这些重复的sellID(创建映射sellID-file\u名称)?或者存在另一个用于此目的的开源应用程序?我的操作系统-CentOS.相关问题: 您可以在一个文件中对所有文件进行分类,然后按照上面链接中的建议查找重复文件 顺便说一句,现在还不清楚您是想只保留复制品还是删除复制品。试试这个: #Save duplicate columns find

我有很多(接近100个)大csv文件,第一列中有sellID。我知道一些sellID在2个或更多文件中重复了2次或更多次。是否可以使用grep查找所有这些重复的sellID(创建映射sellID-file\u名称)?或者存在另一个用于此目的的开源应用程序?我的操作系统-CentOS.

相关问题:

您可以在一个文件中对所有文件进行分类,然后按照上面链接中的建议查找重复文件

顺便说一句,现在还不清楚您是想只保留复制品还是删除复制品。

试试这个:

#Save duplicate columns
find path -type f -name '*.csv' -execdir cut -d, -f1 {} \+ | sort | uniq -d \
  > duplicate-ids.log
#List duplicate records
find path -type f -name '*.csv' -execdir grep -F -f duplicate-ids.log {} \+
注意:我没有测试它。

还有一个答案:

如果您的SellID是固定长度的(比如6个字符),您可以使用

sort data.txt | uniq -w 6 -D
这将打印出非唯一的行

如果您只想自动删除重复行(保留第一行),请尝试:


下面是一个非常简单、有点粗糙的
awk
脚本,用于完成与您描述的内容非常接近的任务:

#!/usr/bin/awk -f

{ if ($1 in seenbefore) {
    printf( "%s\t%s\n", $1, seenbefore[$1]);
    printf( "%s\t%s\n", $1, FILENAME);
    }
  seenbefore[$1]=FILENAME;
  }
您可以推测,我们所做的只是为第一列/字段中的每个值构建一个关联数组(在
BEGIN
特殊块中设置
FS
,以更改输入字段分隔符……这是一种简单的CSV支持形式)。当我们遇到任何重复文件时,我们会打印出重复文件、我们以前在其中看到的文件和当前文件名。在任何情况下,我们都会使用当前文件名添加/更新数组

有了更多的代码,您可以存储和打印每一行的行号,将文件名/行号元组附加到列表中,并将所有输出移动到
END
块中,在该块中以更简洁的格式对其进行汇总,依此类推

对于任何一种情况,我个人都会转向Python,在Python中,数据类型更丰富(实际的列表和元组,而不必将它们连接到字符串或数组的构建和数组中),我会获得更强大的功能(一个实际的CSV解析器,可以处理各种类型的带引号的CSV和可选分隔符,并且生成排序结果非常容易)


但是,希望这能让您走上正确的轨道。

您能澄清一下您的问题吗。您需要在多个文件中找到某个字符串的所有重复项吗?整个记录是否重复,或者是某些行具有相同的sellID,但记录的其余部分不同吗?CSV=逗号分隔的值。字符串中的第一个字段有时在不同的文件中重复。我只需要找到这些行。
#!/usr/bin/awk -f

{ if ($1 in seenbefore) {
    printf( "%s\t%s\n", $1, seenbefore[$1]);
    printf( "%s\t%s\n", $1, FILENAME);
    }
  seenbefore[$1]=FILENAME;
  }