我有一个包含许多文件的s3
存储桶的路径。使用aws-cli
,是否有一个命令可以让我读取所有文件和| wc -l
对输出?我正在尝试计算s3
存储区中所有文件的所有行
答案 0 :(得分:1)
将列表递归到存储桶中,然后将复制命令运行到stdout
。这有助于在机器上下载文件。
您可以按照以下命令为我工作:
aws s3 ls --recursive s3://bucket-name/ | while read FILENAME; do
echo "$FILENAME"
if [ "$(aws s3 cp "$FILENAME" - | wc -l)" -eq 0 ]; then
echo "0"
else
aws s3 cp "$FILENAME" - | wc -l
fi
done | paste -d, - -
输出:
s3://bucket-name/a.txt,343
s3://bucket-name/b.txt,0
答案 1 :(得分:1)
与Linux命令相同,在s3中列出目录中的文件,并使用wc -l逐行计数
aws s3 ls s3://bucket-name/ | wc -l
答案 2 :(得分:0)
或者,您可以使用 S3 Select 使用 Python/boto3 计算 Parquet/CSV/gzip/bzip2 文件中的行数。
sql_stmt = """SELECT count(*) FROM s3object S"""
req_fact =s3.select_object_content(
Bucket = bucket_name,
Key = s3_key,
ExpressionType = 'SQL',
Expression = sql_stmt,
InputSerialization={'Parquet': {}},
OutputSerialization = {'CSV': {
'RecordDelimiter': os.linesep,
'FieldDelimiter': colsep}},
)
请注意,您只能将其应用于 Parquet 和 CSV 文件,并且不适用于原始的非结构化日志。 检查 async counter 以获取完整的 Python 示例。
答案 3 :(得分:-1)
您可以从列出所有S3存储桶开始 -
aws s3 ls
要列出特定存储桶中的对象,请尝试 -
aws s3 ls s3://mybucket
要回答你的问题,你可以做 -
aws s3 cp s3://mybucket/myfile.txt - | wc -l
有关更多awscli S3命令,请查看此link。