开发者

how to add record in alphabetical order

开发者 https://www.devze.com 2023-01-02 01:01 出处:网络
AFile开发者_StackOverflow中文版 contains (a.txt) # this is test file Data: 15th may 2010 Records :

A File开发者_StackOverflow中文版 contains (a.txt)

# this is test file 

Data: 15th may 2010 

Records :

a  

b

c 

d

g

l 

just consider if i want to add new record "f" - i want addit in betwen d and g


You can use Tie::File and treat the text file as array. This example assumes that there're no blank lines and initial text:

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 
    }
}


in one line:

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

You obviously need to process the headers beforehand, but the technique is pretty clear

For example:

[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:~]$ 


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;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消