Re: tricky perl question - ascending order

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



On Sun, May 23, 2010 at 1:15 PM, Jozsi Vadkan <jozsi.avadkan@xxxxxxxxx> wrote:
> or maybe in bash..
> script/"one liner" e.g.: input: http://pastebin.com/raw.php?i=pMZPEsMZ
>
> i want to make this output from it:
> http://pastebin.com/raw.php?i=kH8VxT0A
>
>
> So from the input, i want to make an ascendant order, how many things
> are under a "SOMETHING-XX"
>
> Does anyone has any "perl magic" in the pocket, how to do this? :D

Ok, I'l bite, hope John D. isn't looking...

This is as close as I can get. I shall confess I'm cheating; I had to
add two extra blank lines at the beginning of your file. Don't know if
allowed.
Also, SOMETHING-blocks look collapsed; don't know if bug or feature
for you :D Anyway, it can make for a start.

perl -ne '$/="\n\n"; @a=split(); push
@b,({q=>scalar(@a),l=>[@a]});END{for $i (sort {$a->{q} <=> $b->{q}}
@b) {print "@{$i->{l}}\n"}}' < raw.txt

SOMETHING-85-uj sfvtc
SOMETHING-86 yxcver
SOMETHING-88 yxfrf yxwwcc
SOMETHING-82-H sdfyxcv asdfyxcv asdfgyx
SOMETHING-82 lajsldfj alsdfjlas djfalsd asdfasd dsfx
SOMETHING-85 xdfvqe asdwe yxccv cxvbe wdyfv qyxvvy yxcvtg yxcvgt

For the sake of really helping, let's analyze a bit:

$/= we are replacing record separator for split()
@a = split() split in list context, give me the actual lines
$a = scalar(@a) give me the number of lines
@b is a list to throw our (#lines, lines) pairs into
{q=>$a,l=>[@a]} is a hash with two keys, q (#lines) and l (lines)
END{} when all else is done
sort {$a->{q} <=> $b->{q}} @b give me b sorted by q
print "@{$i->{l}}\n" print each l element as a list

HTH

-- 
Eduardo Grosclaude
Universidad Nacional del Comahue
Neuquen, Argentina
_______________________________________________
CentOS mailing list
CentOS@xxxxxxxxxx
http://lists.centos.org/mailman/listinfo/centos

[Index of Archives]     [CentOS]     [CentOS Announce]     [CentOS Development]     [CentOS ARM Devel]     [CentOS Docs]     [CentOS Virtualization]     [Carrier Grade Linux]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Linux USB]
  Powered by Linux