2013-07-02 13 views
5

Potrzebuję policzyć liczbę wpisów w spakowanym pliku (.gz) z wiadra S3 zawierającego pewne znaki. Jak mogłem to zrobić?s3cmd count linie z zcat i grep

W szczególności moje wiadro S3 to s3://mys3.com/. Zgodnie z tym, istnieją tysiące wiader jak następuje:

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

W każdym z wiadra, istnieje około setki skompresowanego (.gz) obiektów JSON tak:

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

Każdy z spakowany plik zawiera około 20 000 obiektów JSON (każdy obiekt JSON jest linią). W każdym obiekcie JSON istnieją pewne pola zawierające słowo "request". Chcę policzyć, ile obiektów JSON jest tam w wiadrze1 zawierającym słowo "request". Próbowałem tego, ale to nie działa:

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

nie mam wiele doświadczeń powłoki, więc może ktoś mi pomóc z tym? Dzięki!

Odpowiedz

8

W przypadku gdy ktoś jest zainteresowany:

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

właśnie to, czego szukasz, dzięki! –