使用 unix 排序对文件夹中的数百万个文本文件进行排序

使用 unix 排序对文件夹中的数百万个文本文件进行排序

我正在尝试对名为 NZParsed 的文件夹中的大量文件(数百万,即约 250 万).txt 文件进行排序。

文件夹中的所有文件的命名方式为 1.txt、2.txt 等等,直到 25xxxxx.txt

在 eclipse 中运行以下命令后:

os.system("sort -k1,1 -k3,3n -k4,4n -y 1048576 /home/viraj/NZ/NZParsed/* -o /home/viraj/NZ/SplitIndex/abcd.txt")

我收到一个错误:

sh: 1: sort: Argument list too long

有人能告诉我任何其他方法可以将所有这些文件排序为 1 个文件并使用 eclipse 中的以下命令将它们拆分吗:

os.system("split -C 200m /home/viraj/NZ/SplitIndex/abcd.txt /home/viraj/NZ/SplitIndex/")

答案1

该问题与 eclipse 或 python 无关。您已达到 ARG_MAX 限制,有关更多详细信息,请参阅这里但简而言之,这是命令参数列表的字节数的限制。

因此,为了避免这种情况,您需要sort采用不列出文件的方式。例如:

for i in /home/viraj/NZ/NZParsed/*; do cat "$i" ; done |
    sort -k1,1 -k3,3n -k4,4n -y 1048576 > /home/viraj/NZ/SplitIndex/abcd.txt

上述命令将检查cat每个文件,然后将所有文件的内容通过您的sort命令传递。这样,文件就不会被列出,您也不会遇到问题ARG_MAX

另一种方法是使用 find 的-exec选项:

find /home/viraj/NZ/NZParsed/ -type f -name '[0-9]*.txt' -exec cat {} + | 
    sort -k1,1 -k3,3n -k4,4n -y 1048576 > /home/viraj/NZ/SplitIndex/abcd.txt

相关内容