2013-07-02 17 views
5

Devo contare il numero di voci in un file zippato (.gz) da un bucket S3 contenente determinati caratteri. Come potrei farlo?s3cmd contare le righe con zcat e grep

In particolare, il mio secchio S3 è s3://mys3.com/. Sotto questo, ci sono migliaia di secchi come la seguente:

s3://mys3.com/bucket1/ 
s3://mys3.com/bucket2/ 
s3://mys3.com/bucket3/ 
      ... 
s3://mys3.com/bucket2000/ 

In ognuno di secchio, ci sono circa centinaia di zippato (gz) oggetti JSON come la seguente:

s3://mys3.com/bucket1/file1.gz 
s3://mys3.com/bucket1/file2.gz 
s3://mys3.com/bucket1/file3.gz 
      ... 
s3://mys3.com/bucket1/file100.gz 

Ognuno di il file zippato contiene circa 20.000 oggetti JSON (ogni oggetto JSON è una linea). In ognuno degli oggetti JSON, ci sono alcuni campi contenenti la parola "richiesta". Voglio contare quanti oggetti JSON ci sono in bucket1 contenente la parola "richiesta". Ho provato questo ma non ha funzionato:

zcat s3cmd --recursive ls s3://mys3.com/bucket1/ | grep "request" | wc -l 

Non ho molte esperienze di shell, quindi qualcuno potrebbe aiutarmi con quello? Grazie!

risposta

8

Nel caso in cui qualcuno è interessato:

s3cmd ls --recursive s3://mys3.com/bucket1/ | awk '{print $4}' | grep '.gz' | xargs [email protected] s3cmd get @ - | zgrep 'request' | wc -l 
+0

proprio quello che stavo cercando, grazie! –