首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >awk从另一个文件追加列

awk从另一个文件追加列
EN

Stack Overflow用户
提问于 2019-06-25 03:28:34
回答 2查看 99关注 0票数 1

我有一个包含以下数据的csv文件:

xyz/randomname-12ab-ab12-234234asdasd,1233.sdfsdf-sdfsdf,123123,10:10.0
abc/randomname-34ab-cd34-456456dfgdfg,4545,321321,10:10.0

我正在运行以下for循环:

for x in $(cat csv_file | awk -F ',' '{print $1}'); do
    aws s3 ls s3://bucket/$x --human-readable --profile default | awk '{print $3" "$4" "$5}'
done

这给了我一个输出,比如:

12.2 MiB randomname-12ab-ab12-234234asdasd

30.1 MiB randomname-34ab-cd34-456456dfgdfg

我想要实现的是附加csv文件中的第二列加上第一列中的前导字符,以获得如下输出:

12.2 MiB randomname-12ab-ab12-234234asdasd 1233.sdfsdf-sdfsdf.xyz

30.1 MiB randomname-34ab-cd34-456456dfgdfg 4545.abc

编辑:aws s3 ls s3://bucket/ --human-readable --profile default输出:

PRE xyz/

PRE abc/

2019-03-28 11:16:59 10.5 MiB randomname-1234

2019-01-14 11:53:47 90.2 MiB randomname-3456

randomname-12ab-ab12-234234asdasdrandomname-34ab-cd34-456456dfgdfg文件位于xyz和abc文件夹下。

EN

回答 2

Stack Overflow用户

发布于 2019-06-25 04:56:56

不要使用for来读取文件。

该脚本从Bash循环中的csv文件中读取字段,并将它们传递到while变量中,以便在输出中使用。存储桶名称被拆分,因此可以提取最后一部分。

while read -r bucket second_col
do
    aws s3 ls s3://bucket/$x --human-readable --profile default | awk -v bucket=$bucket -v second_col=$second_col '{split(bucket, bucket_pre, "/"); print $3, $4, $5, second_col "." bucket_pre[2]}'
done <  <(awk -F ',' '{print $1 $2}' csv_file)

我不知道csv文件中的第二个字段是什么,所以我创建了一个变量名(second_col)。你应该用一个更有意义的词来代替。当提供虚拟数据时,很难给出好的答案,而且它的含义无法辨别,并且在问题中没有赋予它任何含义。

票数 1
EN

Stack Overflow用户

发布于 2019-06-25 16:01:11

这是一个全AWK版本。我不能访问亚马逊网络服务,所以我不得不创建bucket/...树结构来进行测试。如果有效,请让我知道:

$ awk -F, '{                                 # separator for csv_file processing
    cmd="ls -h -s bucket/" $1                # form the command, in aws probably:
    # cmd="aws s3 ls s3://bucket/" $1 " --human-readable --profile default"
    cmd | getline ret                        # execute command, get returned output
    close(cmd)                               # close the cmd to save fds
    split($1,tmp,"/")                        # getting the path 
    print ret,$2 "." tmp[1]                  # output
}' csv_file

带有路径和(touched)文件bucket/abc/randomname-34ab-cd34-456456dfgdfgbucket/xyz/randomname-12ab-ab12-234234asdasd的输出

0 bucket/xyz/randomname-12ab-ab12-234234asdasd 1233.sdfsdf-sdfsdf.xyz
0 bucket/abc/randomname-34ab-cd34-456456dfgdfg 4545.abc
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56742810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档