如何用awk等工具基于CSV指定列生成并执行aws s3 cp命令?
解决方案:从CSV生成并执行AWS S3复制命令
基本场景(无表头CSV)
如果你的CSV文件没有表头行,直接提取第2列(文件名)和第12列(年份)生成命令并执行,可使用以下单行命令:
awk -F ',' '{print "aws s3 cp ./local/path/"$2" s3://your-bucket/"$12"/"$2""}' input.csv | sh
-F ',':指定CSV的字段分隔符为逗号(如果是制表符分隔,改为-F '\t')./local/path/:替换为本地文件实际存储路径s3://your-bucket/:替换为目标S3桶的路径| sh:将生成的命令直接传递给shell执行
带表头的CSV
如果CSV第一行是表头,需要跳过表头行,使用:
awk -F ',' 'NR>1 {print "aws s3 cp ./local/path/"$2" s3://your-bucket/"$12"/"$2""}' input.csv | sh
NR>1:表示只处理行号大于1的内容,跳过第一行表头
处理带引号的字段
如果CSV字段包含双引号(比如"example.txt"),需要先去除引号再生成命令:
awk -F ',' 'NR>1 {gsub(/"/, "", $2); gsub(/"/, "", $12); print "aws s3 cp ./local/path/"$2" s3://your-bucket/"$12"/"$2""}' input.csv | sh
gsub(/"/, "", $2):移除第2列中的所有双引号,同理处理第12列
安全提示
执行前建议先移除| sh,单独运行awk部分预览生成的命令,确认格式正确后再执行,避免误操作:
awk -F ',' 'NR>1 {print "aws s3 cp ./local/path/"$2" s3://your-bucket/"$12"/"$2""}' input.csv
内容的提问来源于stack exchange,提问作者diyer0001
相关产品推荐
相关产品推荐

