在linux中排序多个文件
我有多个(很多)文件;每个都非常大:
file0.txt file1.txt file2.txt 我不想将它们加入到单个文件中,因为生成的文件将是10 Gigs.每个文件中的每一行包含一个40字节的字符串.这些字符串现在已经很好地排序了(大约1:10步骤是值的减少而不是增加). 我想订购这些线. (如果可能就位?)这意味着file0.txt末尾的一些行将被移动到file1.txt的开头,反之亦然. 我正在使用Linux并且对它很新.我知道单个文件的sort命令,但我想知道是否有办法对多个文件进行排序.或者也许有一种方法可以制作一个由较小的文件制作的伪文件,linux会将其视为单个文件. 我所知道的可以做到: 编辑 要清楚,如果文件看起来像这样: f0.txt DDD XXX AAA f1.txt BBB FFF CCC f2.txt EEE YYY ZZZ 我要这个: f0.txt AAA BBB CCC f1.txt DDD EEE FFF f2.txt XXX YYY ZZZ 解决方法
我不知道一个命令在进行就地排序,但我认为更快的“合并排序”是可能的:
for file in *.txt; do sort -o $file $file done sort -m *.txt | split -d -l 1000000 - output > for循环中的排序可确保对输入文件的内容进行排序.如果您不想覆盖原始内容,只需更改-o参数后面的值即可. (如果您希望文件已经排序,可以将sort语句更改为“仅检查”:sort -c $file || exit 1) 此外,这里是合并排序如何工作的简短摘要: > sort从每个文件中读取一行.>它命令这些行并选择应该首先出现的行.该行被发送到输出,并从包含该行的文件中读取新行.>重复步骤2,直到任何文件中没有其他行.>此时,输出应该是一个完美排序的文件.>利润! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |