[linux] Deel van een tekst bestand sorteren.

Geert Stappers stappers op debian.org
Do Feb 15 22:42:58 CET 2024


On Thu, Feb 15, 2024 at 09:57:04AM +0100, Paul Slootman via Linux wrote:
> On Wed 14 Feb 2024, Geert Stappers via Linux wrote:
> > > 
> > > vim -c 'argdo g/^-/,/^[^-]/-1!sort' -c wq *
> > 
> > Ja, die doet het.  Dank je wel.
> > Ja, die doet het voor het voorbeeld.  Nog steeds bedankt.
> > 
> > Groeten
> > Geert Stappers
> > 
> > Worstelt met
> > 
> > Kop
> >   MARKER Romeo
> >   MARKER Charlie
> >   MARKER Mike
> > Staart
> 
> vim -c 'argdo g/^  MARKER/,/^[^ ][^ ][^M]/-1!sort' -c wq *
> 
> Het wordt lastiger als er meerdere lijstjes in 1 file staan.
> Dan zou ik weer snel teruggrijpen naar perl...
> 

Ik stond op het punt om iets in Python3 te maken.

De aangeboden voorzet in Perl was te mooi om ongebruikt te laten.

----------->8------------------
#!/usr/bin/perl

$MARKER = '  MARKER';  # a regex
$AB = 1;  # At Begin
@HEAD = ();
@ITEMS = ();
@TAIL = ();


foreach $fn (@ARGV) {
    open(IN, $fn) or die "Can't open file '$fn': $!\n";
    while (<IN>) {
        if (/$MARKER/) {
            push @ITEMS, $_;
            $AB = 0;  # not anymore at begin
        }
        else {
            if ($AB) {
                push @HEAD, $_;
            }
            else {
                push @TAIL, $_;
            }
        }
    }
} continue {
    close IN;
    open(OUT, ">$fn") or die "Can't open file '$fn' for output: $!\n";
    print OUT @HEAD;
    print OUT sort @ITEMS;
    print OUT @TAIL;
    close OUT;
    # For a next file
    $AB = 1;
    @HEAD = ();
    @ITEMS = ();
    @TAIL = ();
}
-------------------8<----------

> Paul

Dank


Groeten
Geert Stappers
-- 
Silence is hard to parse


Meer informatie over de Linux maillijst