2013-07-02 32 views
5

Tôi cần đếm số lượng mục nhập trong một tệp nén (.gz) từ một nhóm S3 chứa các ký tự nhất định. Làm thế nào tôi có thể làm điều đó?s3cmd đếm các dòng với zcat và grep

Cụ thể, thùng S3 của tôi là s3://mys3.com/. Theo đó, có hàng ngàn thùng như sau:

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

Trong mỗi thùng có khoảng hàng trăm nén (.gz) đối tượng JSON như sau:

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

Mỗi tệp nén chứa khoảng 20.000 đối tượng JSON (Mỗi đối tượng JSON là một dòng). Trong mỗi đối tượng JSON, có một số trường có chứa từ "yêu cầu". Tôi muốn đếm có bao nhiêu đối tượng JSON có trong bucket1 chứa từ "yêu cầu". Tôi đã thử điều này nhưng nó không hoạt động:

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

Tôi không có nhiều kinh nghiệm về vỏ, vì vậy bất kỳ ai có thể giúp tôi với điều đó? Cảm ơn!

Trả lời

8

Trong trường hợp bất cứ ai quan tâm:

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

chỉ là những gì tôi đang tìm kiếm, cảm ơn! –