专栏名称: 程序人生
十年漫漫程序人生,打过各种杂,也做过让我骄傲的软件;管理过数十人的团队,还带领一班兄弟姐妹创过业,目前在硅谷一家创业公司担任 VP。关注程序人生,了解程序猿,学做程序猿,做好程序猿,让我们的程序人生精彩满满。
目录
相关文章推荐
程序猿  ·  彻底崩塌!美国IT业裁员狂飙35% ·  22 小时前  
稀土掘金技术社区  ·  从 AI Coding 到 AI ... ·  2 天前  
程序员的那些事  ·  12 ... ·  3 天前  
玉伯  ·  在“找资料 + 写稿”场景 YouMind ... ·  3 天前  
阿里云云栖号  ·  亚太唯一!阿里云Serverless计算产品 ... ·  3 天前  
51好读  ›  专栏  ›  程序人生

Bash 的威力

程序人生  · 公众号  · 程序员  · 2017-11-14 15:57

正文

请到「今天看啥」查看全文


#!/bin/bash

BUCKET=tubitv-awesome-logs

PREFIX=${1:-20171111}

trap ctrl_c INT

function ctrl_c() {

 echo "** User stopped the process with CTRL-C"

 exit $?

}

for key in `aws s3api list-objects --bucket $BUCKET --prefix $PREFIX | jq -r '.Contents[].Key'`

do

 sleep 1

 aws s3 cp s3://$BUCKET/$key - | gunzip -c | log_parser

done

这个 bash 脚本接受一个参数,是 S3 object 的 prefix(文件路径),如果不传,就用默认值。然后,我们用 aws s3api list-objects --bucket $BUCKET --prefix $PREFIX 这个 CLI 获取 bucket 下所有含有 prefix 的 object。s3api 返回 JSON 格式的数据,我们可以用 jq 对其解析,获取每个 object 的 Key,也就是文件名。注意这里我们用了 pipe,aws CLI 的结果被 pipe 给了 jq。

稍微补充一下 pipe 的概念。在 unix 中,程序的输出如果没有特别指定,会输出到一块叫 stdout 的内存中。pipe 操作会将上一个程序的 stdout 的数据放入下一个程序的 stdin。

对于拿到的每个 key,我们循环处理,怎么处理呢?







请到「今天看啥」查看全文