[linux] Re: awk helemaal gek geworden?

Paul Slootman paul+nospam op wurtel.net
Di Jan 5 19:15:02 CET 2016


On Tue 05 Jan 2016, hans paijmans wrote:

> Het volgende scriptje leest van een usb port,  bewerkt de regels en 

Je kunt niet zomaar lezen van een USB port. Bedoel je een USB serial
adapter o.i.d.? Maakt het trouwens uit voor het verhaal; als je nou een
testbestand aanmaakt en die als invoer voert aan je awk programma?

> schrijft ze weer weg.
> De regel die begint met 'for (a=0;a<=aantal;...' doet dat wegschrijven. 

Sowieso is dat al niet correct, als je 2 regels inleest dan probeer je
er 3 te printen. a<aantal dus, niet a<=aantal.

> Zoals het scriptje
> hier staat, met " >> filenaam" weggecommentarieerd, zet de data in de 
> goede volgorde op het scherm. Als ik " >> filenaam" toevoeg, worden de 
> regels IN OMGEKEERDE VOLGORDE naar filenaam geschreven.
> 
> Veel krabben op het hoofd is het gevolg.
> 
> 
> awk '{
> if (substr($0,1,5)=="# Dat")
>     {
>     ident=substr($0,18);
>     filenaam="log_"ident
>     command="rm "filenaam
>     system(command);
>     }
> if (substr($0,1,5)!="# err") regel[aantal++]=$0;
> else
>     {
>     for (a=0;a<=aantal;a++) print regel[a]; # >> filenaam
>     print "logdata geschreven naar "filenaam
>     exit;
>     }
> 
> }' < $port

Je leegt ook nooit de array met regels, is dat de bedoeling?
Ik zou verwachten dat je na het printen van de regels "aantal" weer op 0
zet.

Overigens zou ik veel eerder perl voor zoiets pakken :) awk heeft mij al
veel te vaak voor verrassingen gesteld.


Paul



More information about the Linux mailing list