awk从另一个文件追加列

时间:2019-06-24 19:28:34

标签: bash awk

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

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

我正在跟踪以下循环:

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文件夹下。

2 个答案:

答案 0 :(得分:1)

请勿使用for来读取文件。

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

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 :(得分:1)

这里是全AWK版本。我无权访问AWS,因此必须创建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

具有路径和(touch ed)文件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