Python perl在文本文件中就地排序行

Python perl在文本文件中就地排序行,python,perl,Python,Perl,我希望通过根据给定的键对每行进行排序来修改文本文件,并将旧文件保存为备份。键是每行中包含的数字字符 是否有一个简单的脚本来完成这项工作,最好是在适当的地方 谢谢 没有一个简单的脚本来实现这一点,因为您的建议实际上相当复杂且效率低下。除非您的行在文件中的长度完全相同,否则这几乎是不可能的(或者说,非常愚蠢) 如果您绝对不能在内存中完成,并且希望自己编写代码,那么您最好的方法可能是使用一个。关于如何使用磁带机的示例应该给您一些指导 有一些具有O(n logn)复杂性的就地排序算法,例如,但我不明白您

我希望通过根据给定的键对每行进行排序来修改文本文件,并将旧文件保存为备份。键是每行中包含的数字字符

是否有一个简单的脚本来完成这项工作,最好是在适当的地方


谢谢

没有一个简单的脚本来实现这一点,因为您的建议实际上相当复杂且效率低下。除非您的行在文件中的长度完全相同,否则这几乎是不可能的(或者说,非常愚蠢)


如果您绝对不能在内存中完成,并且希望自己编写代码,那么您最好的方法可能是使用一个。关于如何使用磁带机的示例应该给您一些指导

有一些具有O(n logn)复杂性的就地排序算法,例如,但我不明白您为什么要使用它,而不是使用一些简单的命令,例如Unix
sort
命令。除非您有严格的性能要求或庞大的数据集。。。但是,perl和python可能不是这项工作的最佳工具。

假设您的排序键是每行开头的数字,如下面的示例所示

5 Fine 2 Good 1 Every 4 Does 3 Boy
一旦你了解了施瓦茨变换发生了什么,所有的临时变量看起来都像是过度的杂乱。

在我看来,在适当的地方这样做效率极低。排序需要重新排序,而就地排序意味着重复移动文件的全部内容。你为什么要求在原地完成而不是在记忆中?如果你想要一个好的答案,你应该陈述你的需求,而不是用一个具体的“解决方案”束缚我们的手。你试过“排序”程序吗“排序”通常在所有nix平台上都可用。
sort
实用程序在内存中工作,必要时使用临时文件,而不是就地使用。不过,这绝对是一个伟大而高效的工具。如果你提供一个输入样本,你会得到更多有用的答案。
#! /usr/bin/env perl

use strict;
use warnings;

die "Usage: $0 file ..\n" unless @ARGV;

$^I = ".bak";
undef $/;

while (<>) {
  print map $_->[0],
        sort { $a->[1] <=> $b->[1] }
        map { [ $_, /^(\d+)/ ? $1 : -1 ] }
        /^(.*\n?)/mg;
}
while (<>) {
  my @lines = /^(.*\n?)/mg;
  my @augmented = map { [ $_, /^(\d+)/ ? $1 : -1 ] } @lines;
  my @sorted = sort { $a->[1] <=> $b->[1] } @augmented;
  print map $_->[0], @sorted;
}