Newsgroup: it.comp.os.linux.iniziare
Titolo: grep

Con grep è possibile dirgli una cosa tipo, se in un riga trovi una certa 
espressione, copia l'INTERA riga in un altro file? Ripeti poi il controllo 
per l'intero file (d'ingresso) copiando tutte le linee in questione nel 
file di output?
Mi sto un po' perdendo... :)
Grazie,
Luca

 file di output?
Huh? Non l'ho capita.
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://www.radiance.d2g.com/~zefram
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 Huh? Non l'ho capita.
Nulla, era semplicemente un modo (un po' brutto...) per dire "poi continua 
e fai il controllo sull'intero file" ;-)
Grazie,
Luca

 maggiore di y. Se si scrivi quella riga nel file...
Quello e` piu` un lavoro per awk, ma non ti saprei dire in 4+4=8 come si
fa, perche` io tendo ad usare la bash o il perl.
-- 
  _      ___ ____
 | | /| / (_)_  / >>> aka Luciano Di Lucrezia
 | |/ |/ / / / /_   . Radiance BBS: 
http://www.radiance.ods.org/
 |__/|__/_/ /___/   . Ban Micro$oft from Universities! Support Free Software.
 
Il cuore sboccia una volta sola, e si prepara in una lunga primavera. (Kay)

 fa, perche` io tendo ad usare la bash o il perl.
Grazie mille, mi documento allora :)
Ciao,
Luca

   y. Se si scrivi quella riga nel file...
Allora devi usare gli strumenti giusti:
#v+
#!/usr/bin/perl -w
$val = 42;	# ovviamente
open (INPUT,  "<file_di_input")  or die;
open (OUTPUT, ">file_di_output") or die;
while (<INPUT>) {	
	# ipotesi:
	# 1. la linea contiene un solo valore numerico in mezzo a
	#    caratteri alfabetici
	if (/(\d+)/) {
		print OUTPUT $_ if ($val < sprintf ('%d', $1));
	}
	# oppure:
	# 2. la linea contiene un valore numerico, di lunghezza nota,
	#    ad un offset x, anch'esso noto a priori
	my $x = 47; my $l = 4;
	my $y = substr ($_, $x, $l);
	print OUTPUT $y if ($val < sprintf ('%d', $y));
	# oppure:
	# 3. la linea contiene un pattern fisso, in cui il valore
	#    numerico è riconoscibile
	# [ vedi ipotesi uno, e cambia la regular expression di
	# conseguenza ]
}
close (<OUTPUT>); close (<INPUT>);
#v-


 	print OUTPUT $y if ($val < sprintf ('%d', $y));
 > <CUT>
Argh che casino ;-)
# ipotesi:
# 4. ogni gruppo contiene n sottogruppi: il gruppo è quindi composto da
# 21*(numero sottogruppi) valori (numerici). Io devo leggerne uno (il 
#12esimo mi pare); se è maggiore di un certo valore, allora devo estrarre 
#in un file una parte di questi valori...
Ti ringrazio tantissimo cmounque, sei molto gentile.
Luca

 #in un file una parte di questi valori...
Ti ho mostrato due modi in Perl, con substr e con le regexp. Quello di
cui tu hai bisogno è una combinazione delle due.
Il suggerimento di usare awk è valido, ma il Perl se la cava meglio in
questi casi (è stato fatto apposta); senza contare che, ad imparare il
Perl, ci si guadagna in tutti i casi. :-)


 Perl, ci si guadagna in tutti i casi. :-)
Ti ringrazio di tutto, è ora di mettersi a studiacchiare un po'... Solo 1 
ultima cosa: che vantaggi mi offre il perl, in questi casi, rispetto ad 
altri linguaggi di programmazione tipo il c?
Ri-grazie,
Luca

 altri linguaggi di programmazione tipo il c?
Semplicità. Velocità di sviluppo.
Ovviamente, potresti scriverti un parser decente in C, dato un po' di
tempo e di voglia, ma fai prima a portare a casa la pellaccia con una
buona dose di Perl.


 
Grazie mille (di tutto)
Luca