【问题标题】:How can I combine multiple text files, remove duplicate lines and split the remaining lines into several files of certain length?如何合并多个文本文件,删除重复行并将剩余行拆分为多个特定长度的文件?
【发布时间】:2017-04-26 08:26:40
【问题描述】:

我有很多相对较小的文件,大约 350.000 行文本。 例如:

文件 1:

 asdf
 wetwert
 ddghr
 vbnd
 ...
 sdfre

文件 2:

 erye
 yren
 asdf
 jkdt
 ...
 uory

如您所见,文件 2 的第 3 行与文件 1 中的第 1 行重复。 我想要一个程序/Notepad++ 插件,可以检查和删除多个文件中的这些重复项。

我遇到的下一个问题是我希望将所有列表组合成 1.000.000 行的大文件。 因此,例如,我有这些文件:

  • 648563 行
  • 375924 行
  • 487036 行

我希望他们生成这些文件:

  • 1.000.000 行
  • 511.523 行

最后 2 个文件必须只包含唯一的行。 我怎么可能做到这一点?我可以为此使用一些程序吗?还是多个 Notepad++ 插件的组合? 我知道 GSplit 可以将 1.536.243 的文件拆分为 1.000.000 和 536.243 行的文件,但这还不够,它不会删除重复项。

如果需要,我确实想创建自己的 Notepad++ 插件或程序,但我不知道如何以及从哪里开始。

提前致谢。

【问题讨论】:

  • 行号实际上是文件的一部分吗?如果是,则需要忽略它们以进行重复检查,对吗?它们是否需要保留在输出中?必须保留行的顺序吗?
  • @Pharaoh 不,行号不是文件的一部分,行的顺序无关紧要。
  • 您要删除所有重复项还是保留其中一个?
  • @Toto 我想保留其中一个,所以基本上,我只想保留唯一的行。
  • 那么@Pharaoh 的回答应该适合你。

标签: list split duplicates notepad++ bigdata


【解决方案1】:

您曾询问过 Notepad++,因此使用的是 Windows。另一方面,你说如果需要你想创建一个程序,所以我想主要目标是完成工作。
此答案使用 Unix 工具 - 在 Windows 上,您可以使用 Cygwin 获得这些工具。

要运行命令,您必须在终端/控制台中键入(或粘贴)它们。

cat file1 file2 file3 | sort -u | split -l1000000 - outfile_

cat 读取文件并回显它们;通常,到屏幕,但管道| 将命令的输出传递给它,并将其通过管道传递给右侧的命令。

sort 显然对它们进行了排序,开关-u 告诉它删除重复的行。

然后将输出通过管道传送到split,开关-l1000000 告诉它在1000000 行之后拆分。 -(周围有空格)告诉它不是从文件中读取输入,而是从“标准输入”中读取;在这种情况下,sort -u 中的输出。最后一个字,outfile_,您可以根据需要更改。

按原样写,这将产生outfile_aaoutfile_ab 等文件 - 您可以使用此命令中的最后一个字进行修改。

如果您的目录中有所有文件,但其中没有其他文件,则可以使用* 而不是列出所有文件:

cat * | sort -u | split -l1000000 - outfile_

如果文件可能包含空行,您可能需要删除它们。否则,它们将被排序到顶部,并且您的第一个文件将没有完整的 1.000.000 值:

cat file1 file2 file3 | grep -v '^\s*$' | sort -u | split -l1000000 - outfile_

这也将删除仅包含空格的行。 grep 使用正则表达式过滤输入。 -v 反转过滤器;通常,grep 只保留匹配的行。现在,它只保留不匹配的行。 ^\s*$ 匹配所有仅包含 0 个或多个空格字符(如空格或制表符)的行。

如果您需要定期执行此操作,您可以编写一个脚本,这样您就不必记住细节:

#!/bin/sh
cat * | sort -u | split -l1000000 - outfile_

将其保存为文件(例如combine.sh)并运行它

./combine.sh

【讨论】:

    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多