list - 如何合并多个文本文件、删除重复行并将剩余行分割成一定长度的多个文件?

标签 list split duplicates notepad++ bigdata

我有很多相对较小的文件,大约有 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++ 插件或程序,但我不知道如何以及从哪里开始。

提前致谢。

最佳答案

您询问了 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

关于list - 如何合并多个文本文件、删除重复行并将剩余行分割成一定长度的多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43628753/

相关文章:

python - 访问拆分列表中的某些单词

python - 根据可能不存在于所有值上的分隔符将 Pandas 列拆分为两个

MySQL:限制列中的重复次数

javascript - 如何从二维数组中删除重复项?

list - Scala:过滤器在 Iterator 与 List 上的行为

python - 如何从大量数字中快速生成所有对的列表?

python - 如何在Python中仅将包含数字和字符的列表中的数字转换为int

Flutter/Dart - 将逗号分隔的字符串拆分为 3 个变量?

sql-server - 将数据导入 SQL Server 时跳过重复项

javascript - 使用 jQuery 迭代 JSON 对象