如何使用 shell 脚本在 csv 文件的列开头插入值
How to insert value at start of column in csv file using shell script
我有以下代码来获取 API 数据并将其存储在 csv 文件中:
for projectid in `gcloud scc assets list <someorgID>
--filter="security_center_properties.resource_type=\"google.cloud.resourcemanager.Project\""
-- format="get(asset["securityCenterProperties"]["resourceDisplayName"])"`
do
gcloud recommender recommendations list \
--location=global \
--recommender=google.iam.policy.Recommender \
--project=$projectid \
--format="csv[no-heading](content["overview"], content["operationGroups"])" >> temp_iam.csv done
这将得到如下结果:
cloudresourcemanager.googleapis.com, remove
cloudresourcemanager.googleapis.com, add
我想将 $projectid 的值添加到第一位为:
projectid1, cloudresourcemanager.googleapis.com, remove
projectid2, cloudresourcemanager.googleapis.com, add
我怎样才能做到这一点?
你可以要求awk
插入循环变量;这里有一个简化的循环来演示:
for projectid in projectid1 projectid2
do
gcloud ... | awk -v project="$projectid" '{ =project ", " ; print;}'
done
这会将 gcloud ...
的输出通过管道传递给 awk; awk 被赋予一个名为“project”的变量,该变量被设置为循环变量 $projectid
的值。然后在 awk 的每一行输入(gcloud 的输出)中,我们用 project
变量、命令和 space 的串联替换第一个字段,然后是第一个字段的值——本质上是在projectid 值作为 CSV 输出的新第一个值。
新脚本为:
for projectid in `gcloud scc assets list <someorgID>
--filter="security_center_properties.resource_type=\"google.cloud.resourcemanager.Project\""
-- format="get(asset["securityCenterProperties"]["resourceDisplayName"])"`
do
gcloud recommender recommendations list \
--location=global \
--recommender=google.iam.policy.Recommender \
--project=$projectid \
--format="csv[no-heading](content["overview"], content["operationGroups"])" | \
awk -v project="$projectid" '{ =project ", " ; print;}' >> temp_iam.csv
done
GCP API 在响应中包含 resource name,因此该响应的一部分包含项目编号。
具体来说,gcloud recommender recommendations list
调用了Recommender API, which responds with a Recommendation resource的projects.locations.recommenders.recommendations.list
方法,并且被gcloud
工具接收到,也就是说我们已经有了项目响应。
要了解如何正确打印该信息,我们可以查看 gcloud topic projections
,我们可以看到一些适用于此处的转换。
如果您对项目编号感兴趣,可以select名称资源的第二段(索引1)进行推荐:
gcloud recommender recommendations list --format="value(name.segment(1))" --location=global --recommender=google.iam.policy.Recommender
要将其包含在当前打印 CSV 的命令中,您可以使用:
gcloud recommender recommendations list \
--location=global \
--recommender=google.iam.policy.Recommender \
--project=$projectid \
--format="csv[no-heading](name.segment(1),content["overview"], content["operationGroups"])" >> temp_iam.csv
我有以下代码来获取 API 数据并将其存储在 csv 文件中:
for projectid in `gcloud scc assets list <someorgID>
--filter="security_center_properties.resource_type=\"google.cloud.resourcemanager.Project\""
-- format="get(asset["securityCenterProperties"]["resourceDisplayName"])"`
do
gcloud recommender recommendations list \
--location=global \
--recommender=google.iam.policy.Recommender \
--project=$projectid \
--format="csv[no-heading](content["overview"], content["operationGroups"])" >> temp_iam.csv done
这将得到如下结果:
cloudresourcemanager.googleapis.com, remove
cloudresourcemanager.googleapis.com, add
我想将 $projectid 的值添加到第一位为:
projectid1, cloudresourcemanager.googleapis.com, remove
projectid2, cloudresourcemanager.googleapis.com, add
我怎样才能做到这一点?
你可以要求awk
插入循环变量;这里有一个简化的循环来演示:
for projectid in projectid1 projectid2
do
gcloud ... | awk -v project="$projectid" '{ =project ", " ; print;}'
done
这会将 gcloud ...
的输出通过管道传递给 awk; awk 被赋予一个名为“project”的变量,该变量被设置为循环变量 $projectid
的值。然后在 awk 的每一行输入(gcloud 的输出)中,我们用 project
变量、命令和 space 的串联替换第一个字段,然后是第一个字段的值——本质上是在projectid 值作为 CSV 输出的新第一个值。
新脚本为:
for projectid in `gcloud scc assets list <someorgID>
--filter="security_center_properties.resource_type=\"google.cloud.resourcemanager.Project\""
-- format="get(asset["securityCenterProperties"]["resourceDisplayName"])"`
do
gcloud recommender recommendations list \
--location=global \
--recommender=google.iam.policy.Recommender \
--project=$projectid \
--format="csv[no-heading](content["overview"], content["operationGroups"])" | \
awk -v project="$projectid" '{ =project ", " ; print;}' >> temp_iam.csv
done
GCP API 在响应中包含 resource name,因此该响应的一部分包含项目编号。
具体来说,gcloud recommender recommendations list
调用了Recommender API, which responds with a Recommendation resource的projects.locations.recommenders.recommendations.list
方法,并且被gcloud
工具接收到,也就是说我们已经有了项目响应。
要了解如何正确打印该信息,我们可以查看 gcloud topic projections
,我们可以看到一些适用于此处的转换。
如果您对项目编号感兴趣,可以select名称资源的第二段(索引1)进行推荐:
gcloud recommender recommendations list --format="value(name.segment(1))" --location=global --recommender=google.iam.policy.Recommender
要将其包含在当前打印 CSV 的命令中,您可以使用:
gcloud recommender recommendations list \
--location=global \
--recommender=google.iam.policy.Recommender \
--project=$projectid \
--format="csv[no-heading](name.segment(1),content["overview"], content["operationGroups"])" >> temp_iam.csv