BASH - 使用awk为文本文件中的每一行添加前缀(文件路径)

时间:2014-08-15 20:28:04

标签: bash awk filepath

我正在尝试获取目录中文件的完整路径。到目前为止,这就是我在bash中所拥有的。

prefix="s3://${s3_bucket}/${s3_folder}/$(date --date="$i days ago" +"%Y/%m/%d")/"
#echo $prefix
aws s3 ls s3://${s3_bucket}/${s3_folder}/$(date --date="$i days ago" +"%Y/%m/%d")/ | sed -n 's/.*\([0-9][0-9]-h.*gz\)/\1/p' | awk '$0="${prefix}"$0' >> ${s3_files_1}

在我的输出中,我得到以下内容:

${prefix}file1.gz  
${prefix}file2.gz

我正在寻找的输出如下所示。

s3://my_bucket/my_folder/file1.gz
s3://my_bucket/my_folder/file2.gz

我的问题是awk命令解释变量$ {prefix}的方式。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

您可以使用-v将shell变量内容传递给awk:

prefix="s3://my_bucket/my_folder/"
echo "file1.gz" | awk -v myprefix="${prefix//\\/\\\\}" '{ print myprefix $0 }'

可悲的是,awk -v不是数据安全的。此示例使用参数扩展来转义反斜杠以避免它们被损坏。