ho una serie di file di indice per alcuni file di dati che fondamentalmente prendono il formato del file indicebash trovare incatenato ad un grep che quindi stampa
: asdfg.log.1234.2345.index file di dati
: asdfg .log
L'idea è di effettuare una ricerca di tutti i file indice. Se il valore XXXX viene visualizzato in un file di indice, andare e grep il relativo file di dati corrispondente e stampare la riga nel file di dati in cui appare il valore XXXX.
Finora posso semplicemente cercare i file di indice per il valore XXXX, ad es.
find . -name "*.index" | xargs grep "XXXX" // Gives me a list of the index files with XXXX in them
Come si fa a trovare il file di indice corrispondente e quindi grep il suo file di dati corrispondente?
grazie Jonathan - questo è più o meno quello che sto dopo il inital sed non completamente, quindi l'ho sostituito con. Grazie a sed 's/\. Log. * /. Log /' – wmitchell
Questo fallirà se i tuoi file sono chiamati nomi con spazio, 'o ". Per capire perché http://en.wikipedia.org/wiki/ xargs # The_separator_problem con GNU parallelo http://www.gnu.org/software/parallel/ il problema di separazione è limitato a nomi di file che contengono \ n find -name '* .index' |.. parallelo grep -l "XXXX" | sed 's/\. Log \. * /. Log /' | sort -u | grep parallelo "XXXX" Guarda il video introduttivo su GNU Parallel all'indirizzo http://www.youtube. com/watch? v = OpaiGYxkSuQ –
@Ole: concordato che questo esegue falli di spazi, newline e così via nei nomi dei file - tuttavia, la domanda è posta in un contesto che presuppone l'assenza di tali complicazioni (usa plain find, non 'find ... -print0', e usa plain' xargs' not 'xargs -0'), quindi la risposta data funziona nello stesso ambiente. –