2010-06-04 5 views

Répondre

4

Vous pouvez utiliser Tie::File et traiter le fichier texte en tant que tableau. Cet exemple suppose qu'il n'y a pas de lignes vides sommes et texte initial:

use Tie::File; 
tie my @array, 'Tie::File', 'filename' or die $!; 

my $rec = 'f'; 

for my $i (0..$#array) { 
    if (($array[$i] cmp $rec) == 1) { 
     splice @array, $i, 0, $rec; 
     last 
    } 
} 
+0

mon fichier a des lignes vides et il y a des lignes vides. – Tree

+0

@ SCNCN2010: Vous pouvez ajouter ce test à la boucle: 'next if $ array [$ i] = ~/^ \ s + $ /;' –

+0

Ceci ne fonctionnera pas, quand l'utilisateur essaie d'ajouter 'K' – Tree

0
use Tie::File(); 
use List::MoreUtils qw(lastidx); 

my $new_item = 'f'; 
{ 
    my @file; 
    tie @file, 'Tie::File', 'a.txt' 
     or die "Could not open 'a.txt' for reading: $!"; 
    splice @file, (1 + lastidx { $_ lt $new_item } @file), 0, $new_item; 
} 
1

en une ligne:

perl -le 'print for(sort((map {chomp; $_} (<>)), "f"))' <infile> outfile 

Vous avez besoin évidemment de traiter les en-têtes à l'avance, mais la technique est assez claire

Par exemple:

[[email protected]:~]$ perl -le 'print for(sort((map {chomp; $_;} (<>)), "f"))' <<EOP 
> x 
> v 
> b 
> m 
> p 
> o 
> l 
> j 
> k 
> EOP 
b 
f 
j 
k 
l 
m 
o 
p 
v 
x 
[[email protected]:~]$ 
Questions connexes