[linux] Deel van een tekst bestand sorteren.
Geert Stappers
stappers op stappers.nl
Di Feb 13 20:48:20 CET 2024
On Tue, Feb 13, 2024 at 08:36:54PM +0100, Mark Janssen wrote:
> On Tue, Feb 13, 2024 at 8:33 PM Geert Stappers wrote:
>
> >
> > Hoi,
> >
> >
> > Van een zwik tekstbestanden wil ik een gedeelte sorteren.
> >
> > Voorbeeld bestand
> > ---
> > Er was eens
> > - Romeo
> > - Charlie
> > - Mike
> > Lang en gelukkig
> > ---
> >
> > Dat zou na de gedeeltelijke sortering
> > ---
> > Er was eens
> > - Charlie
> > - Mike
> > - Romeo
> > Lang en gelukkig
> > ---
> > moeten worden.
> >
> >
> > De echte bestanden hebben meer "kop" en "staart" regels.
> > En de aantalen regels varieren.
> >
> > Het te sorteren deel is wel met "grep" te herkenen.
> > In het voorbeeld met `grep ^\-`
> > - Romeo
> > - Charlie
> > - Mike
> >
> >
> > Hoe die regels te sorteren en kop plus staart heel te laten?
> >
> >
> Dat is niet iets dat je in een one-liner kan doen... maar wel iets dat je
> ook gewoon aan chatgpt had kunnen vragen :)
:-)
> Prompt:
> Van een aantal tekstbestanden wil ik een gedeelte sorteren met linux
> commandline tools (en de rest van je vraag)
>
> ChatGPT:
> Je kunt dit bereiken met behulp van Linux-commandoregels, waarbij je grep
> gebruikt om de relevante regels te selecteren, sed om de relevante sectie
> uit te snijden, sort om deze sectie te sorteren, en paste om de gesorteerde
> sectie terug te voegen in het oorspronkelijke bestand. Hier is een
> voorbeeld van hoe je dit kunt doen:
>
> # Zoek de regels die met een streepje beginnen en sorteer ze
> grep ^\- input.txt | sort > sorted_section.txt
>
> # Knip de sectie uit het originele bestand
> sed '/^\-/,/^$/!d' input.txt > extracted_section.txt
>
> # Verwijder de regels die met een streepje beginnen uit het originele
> bestand
> sed '/^\-/d' input.txt > head_tail.txt
In `head_tail.txt` zitten nu kop en staart achter elkaar.
> # Voeg de gesorteerde sectie terug in het originele bestand
> paste -d '\n' head_tail.txt sorted_section.txt > output.txt
In `output.txt` zitten nu "kop" en "staart" met daarachter
het gesorteerde stuk.
> # Verwijder tijdelijke bestanden
> rm sorted_section.txt extracted_section.txt head_tail.txt
>
> Dit script doet het volgende:
>
> Het selecteert de regels die beginnen met een streepje (^\-) en sorteert
> ze, en slaat ze op in een tijdelijk bestand genaamd sorted_section.txt.
> Het snijdt de sectie uit het originele bestand die begint met een regel met
> een streepje en eindigt met een lege regel (/^\-/,/^$/!d) en slaat deze op
> in extracted_section.txt.
> Het verwijdert de regels die met een streepje beginnen uit het originele
> bestand en slaat de rest op in head_tail.txt.
ja
> Het voegt de gesorteerde sectie terug in het originele bestand met behulp
> van paste.
> Het verwijdert de tijdelijke bestanden om het op te schonen.
> Het uiteindelijke resultaat wordt opgeslagen in output.txt.
>
Toch bedankt.
Groeten
Geert Stappers
--
Silence is hard to parse
Meer informatie over de Linux
maillijst