2013-07-02 15 views
5

Ich muss die Anzahl der Einträge in einer gezippten Datei (.gz) aus einem S3-Bucket mit bestimmten Zeichen zählen. Wie könnte ich es tun?s3cmd Zählzeilen mit zcat und grep

Insbesondere ist mein S3-Eimer s3://mys3.com/. Darunter gibt es Tausende von Eimern wie folgt aus:

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

In jedem der Eimer gibt es etwa hundert Reißverschluss (gz) JSON-Objekte wie folgt aus:

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

Jeder Die gezippte Datei enthält etwa 20.000 JSON-Objekte (jedes JSON-Objekt ist eine Zeile). In jedem JSON-Objekt gibt es bestimmte Felder, die das Wort "request" enthalten. Ich möchte zählen, wie viele JSON-Objekte in Bucket1 mit dem Wort "request" vorhanden sind. Ich habe das versucht, aber es hat nicht funktioniert:

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

Ich habe nicht viele Shell-Erfahrungen, also könnte mir jemand dabei helfen? Vielen Dank!

Antwort

8

Falls es jemanden interessiert:

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

genau das, was ich suchte, danke! –