Newsgroup: it.comp.os.linux.development
Titolo: bash script: awk... questo ostico strumento

Ciao a tutto il Forum. Questo è il mio primo post su questo forum. Spero
possiate aiutarmi nello scrivere uno script bash. Spiego il problema:
Ho una lista infinita di file che hanno nomi del tipo:  
pippo_200805150753.txt
 
Come vedete è contenuta la data (prime 8 cifre) e l'ora (ultime 4 cifre)
nel nome del file. 
Devo estrarre l'informazione "ON" / "OFF" dai files nel periodo che va dal
.. al ... 
Quindi devo fare il grep di "ON" / "OFF" solo nei files dell'intervallo
indicato.
Ho già messo in VARIABILE sia la data di start che quella di stop che
definiscono l'intervallo temporale di interesse. Quindi ho 2 VARIABILI del
tipo:
 
A=20080510
B=20080515
 
Utilizzando queste 2 variabili vorrei riuscire a selezionare i files
nell'intervallo di tempo, e metterli in una variabile. Sto tentando con
qualcosa del tipo:
 
VAR=$(ls -1 /dir/*.txt | gawk -F _ BEGIN { etc.etc.
Dopodichè cercherò di fare il grep del contenuto con un ciclo di for che
utilizzi la suddetta VAR.
Ho difficoltà con awk. Potete aiutarmi?
Ciao e Grazie
Tony
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 possiate aiutarmi nello scrivere uno script bash. Spiego il problema:
forse il problema e' che cerchi di farlo con bash ... penso sia
meglio usare python ... o perl ...
es:
#!/usr/local/bin/python
import os, sys, re
import datetime as dt
if len(sys.argv) != 3:
        raise Exception, 'data inizio - data fine'
_start = dt.datetime.strptime(sys.argv[1]+'0001', '%Y%m%d%H%M')
_stop = dt.datetime.strptime(sys.argv[2]+'2359', '%Y%m%d%H%M')
_mtch = re.compile(r'[a-z]+_([0-9]+).txt')
_files = []
for dpath,dnames,fnames in os.walk('.'):
	for file in fnames:
		_fm = _mtch.match(file)
		if _fm: 
			_data = dt.datetime.strptime(_fm.group(1), '%Y%m%d%H%M')
		if _start < _data and _stop > _data:
			_files.append(file)
# e qui usi i files nella lista
#
print _files
ciao ...
-- 
Never try to teach a pig to sing.
It wastes your time and annoys the pig.

Grazie x avermi risposto e per avermi dedicato del tempo scrivendo lo
script in Python, ma non ho l'interprete sulla macchina. Devo riuscire a
farlo in Bash (penso si possa fare, no!).
Dato che "ls -1 /dir/*.txt" mi dà in output una lunga lista di files del
tipo "pippo_200805130942.txt" e che le variabili A e B contengono
rispettivamente "20080510" e "20080515", perchè la seguente variabile mi
viene vuota?:
VAR==$(ls -1 /dir/*.txt | gawk -F_ "BEGIN {ORS = " "} {if (substr($NF, 0,
8) >= "$A" && substr($NF, 0, 8) <= "$B") print $0 }")
Ciao


 8) >= "$A" && substr($NF, 0, 8) <= "$B") print $0 }")
Scusate, ma sono stati eliminati tutti i backslashs. Provo a quotare:
[quote]
VAR==$(ls -1 /dir/*.txt | gawk -F_ "BEGIN {ORS = " "} {if (substr($NF, 0,
8) >= "$A" && substr($NF, 0, 8) <= "$B") print $0 }")
[/quote]


 8) >= "$A" && substr($NF, 0, 8) <= "$B") print $0 }")
Riprovo. Abbiate pazienza!
VAR==$(ls -1 /dir/*.txt | gawk -F_ "BEGIN {ORS = \" \"} {if (substr(\$NF,
0, 8) >= \"$A\" && substr(\$NF, 0, 8) <= \"$B") print \$0 }")


Spero sia l'ultima:
VAR=$(ls -1 /dir/*.txt | gawk -F_ "BEGIN {ORS = \" \"} {if (substr(\$NF,


 0, 8) >= \"$A\" && substr(\$NF, 0, 8) <= \"$B\") print \$0 }")
ritento ... senza gawk
#!/bin/bash
A=20080510
B=20080603
for FLE in `ls /dir/*.txt`; do
	TMP=${FLE//*_/}
	DATA=${TMP//.txt/}
	WW=$(($DATA-$A))
	if [ $WW -gt 0 ]; then
		# uso grep
		#
	fi
done


 	fi
Ti confermo che il tuo sistema funziona. Ho solo dovuto fare una piccola
modifica:
WW=$(($DATA-$A))
ZZ=$(($B-$DATA))
 	if [[ "$WW" -ge "0" && "ZZ" -ge "0" ]]; then
 		# uso grep
 	fi
Grazie x avermi aiutato.
Avrei un altro ostacolo da superare:
fatto il grep della "parola", dovrei catturare la riga appena sotto la
"parola".
Spero non esagerare con le richieste!
Ciao
   Tony


 Spero non esagerare con le richieste!
don't worry ;-))
questo e' uno dei modi di farlo:
$ grep -A 1 trovami <nomedelfile>|tail -n 1
ciao ....


 ciao ....
Yeaaaah! It works!
Grazie x avermi aiutato.


 Grazie x avermi aiutato.
prego ;-))
ciao ..
