[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