awk fa una cosa strana [messaggio #33825] |
ven, 26 novembre 2010 00:58 |
Dalet Messaggi: 210 Registrato: novembre 2010 |
Senior Member |
|
|
Il file file ha queste tre esatte righe:
pippo; pluto
topolino; blabla; bla
terza; 2010
se do:
cat file | awk '{FS=";"; print $1}'
mi da':
pippo;
topolino
terza
allora faccio cosi' la prima riga:
a pippo; pluto
e mi da' solo a alla prima riga
allora aggiungo una riga bianca in testa e finalmente
va tutto Ok, perche' tutto questo?
--
Saluti, Dalet
|
|
|
|
|
Re: awk fa una cosa strana [messaggio #33836 è una risposta a message #33835] |
ven, 26 novembre 2010 14:53 |
Alessandro Selli Messaggi: 242 Registrato: novembre 2010 |
Senior Member |
|
|
Dalet ha scritto:
> Il 26-11-2010, Mario M. Macaluso dice:
>> On 26 Nov, 00:58, Dalet <da...@address.invalid> wrote:
>
>>> Il file file ha queste tre esatte righe:
>>> pippo; pluto
>>> topolino; blabla; bla
>>> terza; 2010
>>> se do:
>>> cat file | awk '{FS=";"; print $1}'
>
>> awk -F ";" '{ .... }'
>> awk 'BEGIN { FS=";"; } { .... }'
>
> Perfette entrambe grazie!
> Mi resta la curiosita' di capire perche' dando il Field
> Separator come opzione -F non salta piu' la prima riga,
> nella quale invece, con l'FS come lo davo io, evidentemente
> applicava il default che e' spazio.
Perché quando fai awk '{FS=";"; print $1}' file (a proposito, fare cat
file | awk è un Uso Inutile di Cat®) la variabile FS è reinizializzata
*dopo* che awk si è letto e caricato nel buffer la prima riga dell'input.
Ossia dopo che ha scomposto la prima riga nei suoi campi separati dalla FS
di default. Siccome per ogni riga letta la variabile FS che ti serve è
costante, questa va inizializzata prima della lettura della prima riga
(ossia prima che awk esegua la prima esecuzione dello script) e non serve
che sia mai più cambiata per tutta l'esecuzione dello script. Per cui, la
devi inizializzare prima dello script, non durante.
Per farlo hai due metodi: usi uno switch specifico di awk, -F, oppure usi
la clausola BEGIN, che è eseguita una sola volta prima della prima
esecuzione dello script (e quindi prima della lettura della prima riga
dell'input).
Ciao,
--
Alessandro Selli, http://alessandro.route-add.net
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.
Chiave PGP/GPG: EC885A8B
|
|
|
|
Re: awk fa una cosa strana [messaggio #33846 è una risposta a message #33840] |
ven, 26 novembre 2010 20:17 |
Alessandro Selli Messaggi: 242 Registrato: novembre 2010 |
Senior Member |
|
|
Dalet ha scritto:
> Cos'e' l'UIC con tanto di marchio registrato? non sara'
> qualche diavoleria di Jargon?
Ebbene si! Come poteva essere altrimenti? :-)
Signore e Signori, benvenuti nel fantastico e fantasmagorico mondo
dell'UUOC,
°°########################°°
°°## USELESS USE OF CAT ##°°
°°########################°°
http://partmaps.org/era/unix/award.html
dove sono con estrema generosità elargiti i settimanali premi
_____________________
< USO INUTILE DI CAT! >
---------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
tra i tanti altri premi che i disgraziati programmatori, ma forse
dovremmo chiamarli programmabufali, di shell UNIX si sono nel tempo
meritati grazie alla loro prolungata, continuata, pervicace, insistente
e inusitatamente cocciuta ostinazione nel fare cose inutili e complicare
futilmente le operazioni più banali!
Ringraziamo con commossa gratitudine il grande Randal L. Schwartz,
programmatore Perl e maestro di tanti programmatori di script alla
ricerca della perfezione formale e stilistica delle loro opere
shelliche, per aver istituito nel 1995 il premio settimanale UUOC sul
Newsgroup comp.unix.shell dove ha a lungo personalmente provveduto alla
valutazione e selezione del migliore esempio di UUCP che ogni settimana
si sarebbe aggiudicato il NON ambito premio per gl'indiscussi meriti di
alta superficialità, pressapochismo, mancata comprensione degli
strumenti del mestiere e inutile accatastamento di processi e
affastellamento di ridondanti costrutti di shell!
> Molte grazie per la totale spiegazione di awk!!
Prego, che il Gran Pinguino ti assita e ti sorvegli, perché tu non
possa mai cadere in background!
Ciao,
--
Alessandro Selli http://alessandro.route-add.net
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.
|
|
|
|
|