gpt4 book ai didi

sorting - 删除文件中的 n 个重复行

转载 作者:行者123 更新时间:2023-12-03 13:36:24 25 4
gpt4 key购买 nike

1.简要

我有一个大文本文件(14MB)。我需要删除文件中包含 5 个重复行的文本 block 。

很好,如果可能的话,可以使用任何免费的方法。

我使用 Windows,但 Cygwin 解决方案也不错。

2.设置

1.文件结构

I have a file test1.md 。它由重复的 block 组成。每个 block 有 10 行。文件结构(使用 PCRE 正则表达式)

Millionaire
\d{18}
QUESTION.*
.*
.*
.*
.*
.*
.*
.*
Millionaire
\d{18}
QUESTION.*
.*
.*
.*
.*
.*
.*
.*
test1.md 除了 10 行 block 之外没有其他行和文本。它没有空行和行数大于或小于 10 的 block 。

2. 文件示例内容

Millionaire
123456788763237476
QUESTION|2402394827049882049
Who is the greatest Goddess of the world?
Sasha
Kristina
Sasha
Katya
Valeria
AuthorOfQuestion
Millionaire
459385734954395394
QUESTION|9845495845948594999
Where Sasha live?
Novgorod
St. Petersburg
Kazan
Novgorod
Chistopol
Another author
Millionaire
778845225202502505
QUESTION|984ACFBBADD8594999A
Who is the greatest Goddess of the world?
Sasha
Kristina
Sasha
Katya
Valeria
Millionaire
AuthorOfQuestion
Millionaire
903034225025025568
QUESTION|ABC121980850540445C
Another question.
Katya
Sasha
Kazan
Chistopol
Katya
Unknown author
Millionaire
450602938477581129
QUESTION|453636EE4534345AC5E
Where Sasha live?
Novgorod
St. Petersburg
Kazan
Novgorod
Chistopol
Another author

从示例中可以看出, test1.md 具有重复的 7 行 block 。例如,这些 block 是:
Who is the greatest Goddess of the world?
Sasha
Kristina
Sasha
Katya
Valeria
AuthorOfQuestion


Where Sasha live?
Novgorod
St. Petersburg
Kazan
Novgorod
Chistopol
Another author

3. 预期行为

我需要删除所有重复 block 。在我的示例中,我需要得到:

Millionaire
123456788763237476
QUESTION|2402394827049882049
Who is the greatest Goddess of the world?
Sasha
Kristina
Sasha
Katya
Valeria
AuthorOfQuestion
Millionaire
459385734954395394
QUESTION|9845495845948594999
Where Sasha live?
Novgorod
St. Petersburg
Kazan
Novgorod
Chistopol
Another author
Millionaire
778845225202502505
QUESTION|984ACFBBADD8594999A
Millionaire
903034225025025568
QUESTION|ABC121980850540445C
Another question.
Katya
Sasha
Kazan
Chistopol
Katya
Unknown author
Millionaire
450602938477581129
QUESTION|453636EE4534345AC5E
  • 如果 7 行重复 7 行,这些行已在我的文件中使用,则删除重复的 7 行。
  • 如果 1(也是 2-4)行重复 1 行,已在我的文件中使用,重复的 1 行不会删除。在示例单词 SashaKazanChistopolKatya 重复,但这些单词不会删除。


  • 4.没有帮助
  • 谷歌搜索
  • 我发现,Unix 命令 sortsedawk 可以解决类似的任务,但我没有找到,如何使用这些命令解决我的任务。


  • 5.不提供
  • 请不要手动删除每个文本 block 。可能,我有大约几千个不同的重复文本 block 。手动删除所有重复项可能需要很长时间。
  • 最佳答案

    这是您问题的简单解决方案(如果您可以访问 GNU sedsortuniq ):

    sed 's/^Millionaire/\x0&/' file | sort -z -k4 | uniq -z -f3 | tr -d '\000'

    稍微解释一下:
  • 因为您所有的 block 都以单词/行 Millionaire 开头,我们可以通过在前面加上 NUL 来将文件分割成(可变长) block 。每个字符 Millionaire ;
  • 然后我们对那些 NUL 进行排序- 分隔 block (用于 -z 标志),但忽略前 3 个字段(在本例中为行: Millionaire\d+QUESTION|ID... ),使用 -k/--key起始位置为字段 4 的选项(在您的情况下为第 4 行),停止位置是 block 的末尾;
  • 排序后,我们可以用 uniq 过滤掉重复项,再次使用 NUL分隔符而不是换行符( -z ),并忽略前 3 个字段(使用 -f/--skip-fields );
  • 最后,我们删除 NUL带有 tr 的分隔符.

  • 一般来说,只要有办法将文件拆分成 block ,这样的删除重复 block 的解决方案就应该有效。请注意,可以在字段子集上定义 block 相等性(如我们上面所做的那样)。

    关于sorting - 删除文件中的 n 个重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44781734/

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