gpt4 book ai didi

linux - 从许多 csv 文件中删除重复项

转载 作者:太空狗 更新时间:2023-10-29 12:05:53 24 4
gpt4 key购买 nike

给定 n 个 csv 文件,它们的大小加起来达到 100 GB,我需要根据以下规则和条件删除重复行:

  • csv文件编号从1.csv到n.csv,每个文件大小约50MB。
  • 第一列是字符串键,如果两行的第一列相同,则认为两行是重复的。
  • 我想通过将重复项保留在以后的文件中来删除重复项(2.csv 被认为晚于 1.csv)

我的算法如下,想知道有没有更好的。

  • 将所有文件合并成一个大文件

    cat *.csv > one.csv
  • 对 csv 进行排序

    sort one.csv >one_sorted.csv
  • 此时不确定如何消除重复项。 uniq 有一个跳过前 N 个字段的 -f 标志,但在我的例子中,我想跳过除了前 1 个字段之外的所有字段。

我需要最后一步的帮助(消除已排序文件中的重复项)。还有更高效的算法吗?

最佳答案

这是使用 GNU awk 的一种方法:

awk -F, '{ array[$1]=$0 } END { for (i in array) print array[i] }' $(ls -v *.csv)

解释:读取一个按数字排序的文件 glob,我们将每个文件的第一列添加到一个关联数组,该数组的值是整行。这样,保留的副本就是最新文件中出现的副本。完成后,遍历数组的键并打印出值。 GNU awk 确实通过 asort()asorti() 函数提供了排序能力,但是将输出通过管道传递给 sort使事情更容易阅读,并且可能更快、更有效。

如果您需要对第一列进行数字排序,您可以这样做:

awk -F, '{ array[$1]=$0 } END { for (i in array) print array[i] | "sort -nk 1" }' $(ls -v *.csv)

关于linux - 从许多 csv 文件中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12888748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com