[linux] Re: awk helemaal gek geworden?

Hans Paijmans j.j.paijmans op gmail.com
Di Jan 5 21:50:40 CET 2016


On 05/01/16 20:53, Daniel C. von Asmuth wrote:
> Aldus schreef hans paijmans op Tue, Jan 05, 2016 at 03:39:03PM +0100:
>> Ik dacht dat ik na dertig jaar alle rare streken van awk wel had gezien.
>> Niet dus.
>>
>> Het volgende scriptje leest van een usb port,  bewerkt de regels en
>> schrijft ze weer weg.
>> De regel die begint met 'for (a=0;a<=aantal;...' doet dat wegschrijven.
>> 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
> Dit vind ik een wat merkwaardig script; de uitvoer zal erg afhangen van
> de invoer. Zo probeert het kennelijk naar $filenaam te schrijven wat
> alleen werkt als die variabele een waarde heeft gekregen, maar het
> deel dat die variabele zet, verwijdert dan weer $filenaam.

Beste Daniel (en Paul),   een script in  awk wordt een keer uitgevoerd 
voor iedere inputregel.
De regel waar de filenaam uit wordt berekend staat in het begin van de 
input (dat weet ik) en
kan dus rustig een reeds bestaande file uitvegen.

Verder weet ik dat een regel die begint met "# err" aan het einde van de 
input staat. De
array regel[] wordt alleen weggeschreven als dat einde is gevonden, 
waarna het programma
een exit doet. Een END{} blok zou eleganter zijn, maar de usb port 
stuurt geen ctrl-D.

Intussen heb ik gevonden dat als de regels zowel naar stdout als naar de 
file worden geschreven
de volgorde ook in de file correct is. Waarom hij achterstevoren staat 
als alleen naar de file wordt
geschreven is nog steeds een raadsel.

 > Voorstel (als de baas het goed vindt): wij morgen samen AWK scriptje 
saneren en
 > u overmorgen mij helpen met Powershell script op Windows :-)

Ik wil best, maar ik weet ghelemaal niks van powershell.

-- 
Dr. J.J. Paijmans
Houwenberg 2A, 5985 PE Grashoek (L)          077 888 05 77
http://paijmans.net          GSM: +31 621 961 083
v.a. Macbook




More information about the Linux mailing list