Newsgroup: it.comp.os.linux.sys
Titolo: [Semi-OT]: (G)Awk... misteri della fede

E' da anni che continuo a recitare come un mantra "devo imparare awk,
devo imparare awk, devo imparare awk...". Purtuttavia le mie conoscenze
rimangono (tanto per cambiare) parecchio scarse, in questo campo...
Il mio problema è questo: periodicamente devo verificare presso una
pagina html se il link a un determinato file XXXpippo.exe è cambiato, con
XXX=numero di versione.
Dato che la pagina è rimasta uguale a se stessa per mesi (per quanto
riguarda l'html, intendo) mi bastava fare, dopo aver analizzato molto
superficialmente la struttura della pagina, un
filename=`lynx -source 
http://nomedelsito.com/path/
 |grep pippo.exe| \
cut -f 5 -d \"`
wget 
nomedelsito.com
$updurl
e me la cavavo con poco...
Adesso hanno cambiato la pagina...
Potrei anche in questo caso cavarmela con poco variando solamente
la posizione del campo interessato.
Ma mi domandavo come fosse possibile ( e lo sarà sicuramente ) far girare
qualcosa in awk in modo che sia in grado, da solo, di capire quale
porzione della stringa tirare fuori, senza necessità di passargli l'indice
"cablato dentro": analizzando la stringa e tirando fuori lo "spezzone" che
contiene il mio pattern...
Idee?
-- 
Emanuele Balla aka Skull
-----------------------------------------------------------------------
Besides, I think [Slackware] sounds better than 'Microsoft', don't you?
(By Patrick Volkerding)

 Idee?
Non ho capito bene, ma qualcosa come:
grep pippo.exe | sed 's/[prima di pippo]//'
????
bye,
-- 
  Piergiorgio Sartor

 valido per provare a trovare uan regexp funzionante.
Dehehe...
Ho a casa un bel libro (scritto anche bene) di nome "Sed & Awk" della
O'Rielly... E' lě da tre mesi che aspetta che il sottoscritto abbia
terminato con lo Stevens e abbia tempo di dedicargli...
E' tutto un dire ;-P


 aspetta impaziente ;-)
E tu mi fai il riassunto dello stevens dal capitolo 13 in poi? ;-)


 
Ripiglio 'sto vecchio thread per domandar consiglio ;-)
Dopo un paio di giorni di studio su awk (viva le vacanze... ) questo è
quello che mi è saltato fuori:
*** script paste starts here ***
updurl=`lynx -source 
http://www.sophos.com/downloads/ide|\
grep ides.zip|\
head 1|\
awk -F\" ' 
{ for (x=1 ; x<=NF; x++) 
        {  
        if ( $x ~ /^(\/.*)+[0..9]*_ides\.zip$/ ) 
                {
                print $x
                }
        }
} '`
wget 
http://www.sophos.com
$updurl
*** script paste stops here ***
Il sito lo lascio palese, tanto non c'è nulla da mascherare ;-)
Qualcuno ha qualche consiglio più efficiente/elegante per fare la stessa
cosa?
Mandi...


 cosa?
"grep" ed "head" li puoi integrare nel programma "awk",
o meglio "gawk", con:
gawk '/ides.zip/ '{ for(...) {...}; exit)'
La direttiva "/ides.zip/" dice a "gawk" di processare solo
le linee che contengono "ides.zip".
Il comando "exit", invece...
Se il nome del completo del file e` sempre tra virgolette,
uno sporco trucco potrebbe essere:
lynx ... | tr "\"" "\n" | grep "ides.zip" | head 1
Cioe` trasformi le virgolette in newline ed isoli cosi`
il nome in un'unica riga che vai a pescare con grep/head...
Serve, forse, un po' di sanity check (il nome e` sempre presente?).
bye,
-- 
  Piergiorgio Sartor

 Serve, forse, un po' di sanity check (il nome e` sempre presente?).
C'è già, è la prima cosa che ho messo dopo aver verificato che mi estrae
la stringa giusta...
Thanx!
