[linux] probleem met spaties aan begin van een regel

paai j.j.paijmans op gmail.com
Do Feb 20 15:05:11 CET 2020


On 20-02-2020 13:47, Paul Slootman wrote:
> On Thu 20 Feb 2020, paai wrote:
>
>>>> Als je nu het eerste woord wilt isoleren, moet je met een kanon als gawk op
>>>> die mug gaan schieten, terwijl 'cut' veel eleganter lijkt.
>>>>
>>>> Wat is de mooiste oplossing hervoor?
>>> awk '{print $1}' voor het 1e kolom gescheiden door spaties.
>> Maar ik wil dus awk niet gebruiken...
> Waarom niet? Denk je dat die zwaarder is dan cut?
>
> # ps faxu | time awk '{print $1}' > /dev/null
> 0.00user 0.00system 0:00.18elapsed 1%CPU (0avgtext+0avgdata 2472maxresident)k
> 0inputs+0outputs (0major+108minor)pagefaults 0swaps
>
> # ps faxu | time cut -f1 > /dev/null
> 0.00user 0.00system 0:00.18elapsed 5%CPU (0avgtext+0avgdata 1796maxresident)k
> 0inputs+0outputs (0major+76minor)pagefaults 0swaps
>
> Het is misschien eventjes 50% meer maxresident k, maar cpu is 5 x lager,
> uit dit simpele testje.
>
>
> Anders wordt het al snel iets als
>      ps | sed 's,^  *,,' | cut -f1 -d' '
> als je per se cut wil gebruiken, maar of het met een extra process in de
> pipeline er beter van wordt...
>
> Of:
>
>      ps | while read pid rest; do echo $pid; done
>
> maar ik denk dat awk nog steeds sneller is.
>
>
> Paul


Een heel groot stuk plezier aan bash hacken (eigenlijk elke serieuze 
taal) is dat het bijna een gedicht wordt, of het componeren van een 
stukje muziek, waarin soms erg onlogische beslissingen worden genomen 
"omdat het zo mooi is...". Uiteraard is beauty in the eye of the beholder.

De laatste regel zou mijn voorkeur hebben, maar hoe krijg je $pid te 
pakken? De read wordt afaik in een subshell gelezen en die communiceert 
niet met de moeder-shell.


-- 
Dr. J.J. Paijmans



Meer informatie over de Linux maillijst