List 如何组合多个文本文件、删除重复行并将其余行拆分为若干特定长度的文件?

List 如何组合多个文本文件、删除重复行并将其余行拆分为若干特定长度的文件?,list,split,duplicates,notepad++,bigdata,List,Split,Duplicates,Notepad++,Bigdata,我有很多相对较小的文件,大约有350000行文本。 例如: 文件1: asdf wetwert ddghr vbnd ... sdfre 文件2: erye yren asdf jkdt ... uory 如您所见,文件2的第3行与文件1的第1行重复。 我想要一个程序/记事本++插件,可以检查和删除多个文件中的这些重复 我遇到的下一个问题是,我希望将所有列表合并成1.000.000行的大文件。 例如,我有以下文件: 648563行 375924行 487036行

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

文件1:

 asdf
 wetwert
 ddghr
 vbnd
 ...
 sdfre
文件2:

 erye
 yren
 asdf
 jkdt
 ...
 uory
如您所见,文件2的第3行与文件1的第1行重复。 我想要一个程序/记事本++插件,可以检查和删除多个文件中的这些重复

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

  • 648563行
  • 375924行
  • 487036行
我希望它们生成以下文件:

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

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


提前感谢。

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

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

cat file1 file2 file3 | sort -u | split -l1000000 - outfile_
cat
读取文件并回显;通常情况下,会显示在屏幕上,但管道
|
会将命令的输出从左移到右,然后通过管道将其传递到右上的命令

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

然后,输出通过管道传输到
split
,开关
-l1000000
告诉它在1000000行之后进行分割。
-
(周围有空格)告诉它从“标准输入”中读取输入,而不是从文件中读取输入;在本例中,
sort-u
中的输出。最后一个单词,
outfile\uu
,如果您愿意,可以由您更改

按原样编写,这将生成类似于
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

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