как добавить запись в алфавитном порядке - PullRequest
0 голосов
/ 04 июня 2010

Файл содержит (a.txt)

# this is test file 

Data: 15th may 2010 

Records :

a  

b

c 

d

g

l 

просто подумайте, хочу ли я добавить новую запись "f" - я хочу добавить addit между d и g

Ответы [ 3 ]

4 голосов
/ 04 июня 2010

Вы можете использовать Tie :: File и рассматривать текстовый файл как массив. В этом примере предполагается, что нет пустых строк и исходного текста:

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 
    }
}
1 голос
/ 04 июня 2010

в одну строку:

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

Очевидно, что вам нужно обработать заголовки заранее, но техника довольно ясна

Например:

[dsm@localhost:~]$ 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
[dsm@localhost:~]$ 
0 голосов
/ 04 июня 2010
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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...