Io dovrei in questi file andare a prendere il sample name. Prima faccio un grep Sample\ Name e poi pensavo di prendere il sample name con sed. Mi piacerebbe dire qualcosa tipo: prendi dopo Sample\ Name:[\ \t]* tutto fino a Injection oppure, se Injection non c'è, fino alla fine della riga.
Spero di essermi spiegato.
Grazie mille
Piviul
-- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-REQU...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org
To UNSUBSCRIBE, email to debian-italian-REQU...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
>> Mi piacerebbe dire qualcosa tipo: >> prendi dopo Sample\ Name:[\ \t]* tutto fino a Injection oppure, se >> Injection non c'è, fino alla fine della riga.
> Beh, potresti prima di tutto togliere "Injection", cosi poi ti basta > gestire il caso in cui "Injection" non c'è.. > Ma mi pare troppo semplice, quindi forse non ho capito bene... :)
Invece hai capito benissimo!!! Lo sapevo che era semplice ma non mi veniva in mente.
In ogni caso non è possibile fare il match di tutto fino a che non si incontri la parola tizio oppure la parola caio? Questo non lo so proprio fare.
Mille grazie.
Piviul
-- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-REQU...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org
To UNSUBSCRIBE, email to debian-italian-REQU...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
> Mi piacerebbe dire qualcosa tipo: > prendi dopo Sample\ Name:[\ \t]* tutto fino a Injection oppure, se > Injection non c'è, fino alla fine della riga.
Beh, potresti prima di tutto togliere "Injection", cosi poi ti basta gestire il caso in cui "Injection" non c'è.. Ma mi pare troppo semplice, quindi forse non ho capito bene... :) -- DaC 44°59'N 7°27'E
-- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-REQU...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org
To UNSUBSCRIBE, email to debian-italian-REQU...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Il 09 novembre 2009 11.43, Paolo Sala <piv...@riminilug.it> ha scritto:
> Io dovrei in questi file andare a prendere il sample name. Prima faccio > un grep Sample\ Name e poi pensavo di prendere il sample name con sed.
A quanto pare, sed non supporta l'opzione nongreedy.
Una possibilità potrebbe essere cut, tipo:
grep ^Sample prova.txt | cut -b 15-50
Questo funziona se c'è una certa regolarità tra le colonne, ovvero se non succede mai che Injection inizi prima di quando finisce l'ultimo Sample Name.
Un'altra possibilità, se tra Sample Name: e il nome e poi tra il nome e Injection ci sono almeno due spazi, è:
-- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-REQU...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org
To UNSUBSCRIBE, email to debian-italian-REQU...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
> In ogni caso non è possibile fare il match di tutto fino a che non > si incontri la parola tizio oppure la parola caio? Questo non lo so > proprio fare.
Una stringa di caratteri "comuni" dovrebbe matchare se stessa, quindi, ammettendo che compaia in tutte le righe..
s/^Sample Name:[ \t]*\(.*\)[ \t]*Injection/&1/
dovrebbe *forse* (non l'ho provato) trasformarti la riga lasciando solo ciò che ti interessa.
L'uso di \( \) e &1 penso tu lo possa approfondire nel man.
HTH, -- DaC 44°59'N 7°27'E
-- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-REQU...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org
To UNSUBSCRIBE, email to debian-italian-REQU...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
>> In ogni caso non è possibile fare il match di tutto fino a che non >> si incontri la parola tizio oppure la parola caio? Questo non lo so >> proprio fare.
> Una stringa di caratteri "comuni" dovrebbe matchare se stessa, quindi, > ammettendo che compaia in tutte le righe..
> s/^Sample Name:[ \t]*\(.*\)[ \t]*Injection/&1/
volevi forse dire 's/^Sample Name:[ \t]*\(.*\)[ \t]*Injection/\1/' altrimenti mi tira dietro anche Sample Name! Poi il problema è che Injection dovrebbe essere opzionale e questo non so come fare a dirglielo...
Ciao e mille grazie ancora
Piviul
-- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-REQU...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org
To UNSUBSCRIBE, email to debian-italian-REQU...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Perfetto, non ci avevo pensato! al posto di gawk poi si potrebbe sempre usare cut -d\| -f 2
Mille e mille grazie!!!
Piviul
-- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-REQU...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org
To UNSUBSCRIBE, email to debian-italian-REQU...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Lo script sed seleziona solo le righe che servono, ne elimina la parte finale se necessario, poi elimina la parte iniziale e poi stampa ciò che rimane, cioè uno o più campi. Sed è eseguito con l'opzione '-n' in modo da non trovare sullo standard output tutte le altre righe.
Saluti,
alfredo
-- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-REQU...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org
To UNSUBSCRIBE, email to debian-italian-REQU...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
-- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-REQU...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org
To UNSUBSCRIBE, email to debian-italian-REQU...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
> On Mon, 09 Nov 2009 11:43:24 +0100 > Paolo Sala <piv...@riminilug.it> wrote:
>> Ciao a tutti, come si fa a matchare tutto fino a che non contiene >> opzionalmente una parola? >> [...] >> Sample Name: Std livello 3 Injection >> Volume: 25,0 >> [...]
vuoi recuperare anche la riga con "Volume:"? oppure solo quello che sta scritto dopo "Sample Name"?
Max
-- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-REQU...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org
To UNSUBSCRIBE, email to debian-italian-REQU...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
> vuoi recuperare anche la riga con "Volume:"? > oppure solo quello che sta scritto dopo "Sample Name"?
Solo Sample Name ma ho già fatto grazie ai vostri consigli.
Ancora mille e mille grazie
Piviul
-- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-REQU...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org
To UNSUBSCRIBE, email to debian-italian-REQU...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org