我有很多相对较小的文件,大约有 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_aa
、outfile_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/