繁体   English   中英

在Unix上删除文件中所有重复项

Removing all occurences of duplicates in a file on Unix

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想基于多个列从文件中删除所有重复出现的事件。 这是一个玩具示例:

想要通过前4列删除所有不唯一的记录。 因此,将awk脚本应用于:

    BLUE,CAR,RED,HOUSE,40
    BLUE,CAR,BLACK,HOUSE,20
    BLUE,CAR,GREEN,HOUSE,10
    BLUE,TRUCK,RED,HOUSE,40
    BLUE,TRUCK,GREEN,HOUSE,40
    BLUE,TRUCK,RED,HOUSE,40

应该导致

    BLUE,CAR,RED,HOUSE,40
    BLUE,CAR,BLACK,HOUSE,20
    BLUE,CAR,GREEN,HOUSE,10
    BLUE,TRUCK,GREEN,HOUSE,40

我努力了:

awk -F"," -v OFS="," '{cnt[$1,$2,$3,$4]++} END {for (rec in cnt) if (cnt[rec] == 1) print rec}' ss.txt

这将成功删除两个重复项,但不应用正确的分隔符或不打印整个记录,从而导致:

    BLUECARREDHOUSE
    BLUETRUCKGREENHOUSE
    BLUECARBLACKHOUSE
    BLUECARGREENHOUSE

我更喜欢awk解决方案,但是任何便携式解决方案都值得欢迎。

1 个回复

假设您希望整个记录具有前4列中唯一的记录,则可以完成此工作:

awk -F',' '{cnt[$1,$2,$3,$4]++;line[$1,$2,$3,$4] = $0}
           END {for (rec in cnt) if (cnt[rec] == 1) print line[rec]}' \
    ss.txt

保存行和计数; 取回您输入的内容。 如果您有千兆字节的文件,这会很痛苦; 有一些方法仅在需要时保存唯一行。 这只会保存每行的第一个版本,并在已知条目不唯一时将其删除。 (未经测试-但我认为应该可以。根据Ed Morton的 评论进行修改。)

awk -F',' '{ if (cnt[$1,$2,$3,$4]++ == 0)
                 line[$1,$2,$3,$4] = $0
             else
                 delete line[$1,$2,$3,$4]
           }
           END {for (rec in line) print line[rec]}' \
    ss.txt

如果只需要4个关键列,那么这只会将4列保存为您要打印的逗号分隔格式:

awk -F',' '{cnt[$1,$2,$3,$4]++;line[$1,$2,$3,$4] = $1 "," $2 "," $3 "," $4}
           END {for (rec in cnt) if (cnt[rec] == 1) print line[rec]}' \
    ss.txt
1 删除pandas.DataFrame中所有重复项的更好策略?

有谁知道更好的策略如何从pandas.DataFrame删除ALL重复pandas.DataFrame ? 我知道df.drop_duplicates() ,请参见下面的示例: 请注意,这不会删除ALL重复项,也就是说,它将删除每一个下一个非唯一行,但是保留原始行不变。 我当 ...

2 删除R中所有重复项的最快方法

我想删除在矢量中出现多次的所有项目。 具体来说,这包括字符,数字和整数向量。 目前,我正在使用duplicated()向前和向后(使用fromLast参数)。 是否有更高计算效率(更快)的方法在R中执行此操作? 下面的解决方案很简单,可以写入/读取,但执行重复搜索两次似乎效率低下。 ...

3 如何删除字典中所有值小于变量的项? [重复]

这个问题已经在这里有了答案: 根据值从字典中删除条目 4个答案 我有一个单词和值的列表,例如: 我想查找并删除所有值小于10的单词,因此最终结果如下: 我该怎么做呢? 只是说,我不预先知道值,所以我不能只对其中的一些进行排序和修剪。 ...

5 如何更优雅地删除Ruby Array中所有元素的重复项?

我想删除Array对象中的重复项。 最好用一个例子来解释。 我有以下Array 我想要一个方法,通过从Array元素中删除重复的项目来清除它,并返回一个Array ,每个唯一的项目都有一个元素。 所以这是我写的方法来做到这一点: 所以现在当我调用entries.cl ...

7 排序并从文件中删除unix中的重复项

下面是我的输入文件,但是我的实际输入有数百万条记录, 首先,我想使用第二列(电子邮件)的升序对上述文件进行排序,其次,我想使用第六列(时间戳)的降序对文件进行排序。 第三,我需要删除重复的第二列。 预期产量: 我尝试了什么,但是我想用单个命令而不是不同的步骤来做所有事情, ...

9 Unix-文件中所有列的不重复计数,计数和值总和

给定一个文件,例如: 预期输出: 我想返回每列下的值计数,每列下不同值的计数,然后返回每列下所有值的总和。 但是我的逻辑/语法肯定出问题了,任何纠正它的帮助都将很棒! 到目前为止的代码(在momemnt中,它不返回任何输出): ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM