对齐 csv 文件中的值

对齐 csv 文件中的值

我有一个包含以下信息的 csv 文件,该 csv 文件是通过组合 和 的结果创建的aws rds describe-db-instancesaws rds describe-reserved-db-instances并使用 jq 解析结果,然后我paste将 csv 文件放在一起。

DB Instance Identifier,Reservation ID,State
alpha-db-dev,alpha-db-dev-26aug2022,active
alpha-db-prod,alpha-db-prod-26aug2022,active
alpha-db-staging,alpha-db-staging-26aug2022,active
beta-db-dev-primary,beta-db-dev-8dec2021,active
beta-db-prod-primary,charlie-db-dev-8dec2021,active
beta-db-prod-replica,charlie-db-staging-loadtest-8dec2021,active
beta-db-staging-primary,,
charlie-db-dev,,
charlie-db-prod-dms,,
charlie-db-prod-dms-replica,,
charlie-db-staging,,
charlie-db-staging-loadtest,,

我想做的是匹配第二列的前几个单词和第一列的前几个单词。

结果应该是这样的

DB Instance Identifier,Reservation ID,State
alpha-db-dev,alpha-db-dev-26aug2022,active
alpha-db-prod,alpha-db-prod-26aug2022,active
alpha-db-staging,alpha-db-staging-26aug2022,active
beta-db-dev-primary,beta-db-dev-8dec2021,active
beta-db-prod-primary,,
beta-db-prod-replica,,
beta-db-staging-primary,,
charlie-db-dev,charlie-db-dev-8dec2021,active
charlie-db-prod-dms,,
charlie-db-prod-dms-replica,,
charlie-db-staging,,
charlie-db-staging-loadtest,charlie-db-staging-loadtest-8dec2021,active

基本上我想要发生的是,在 csv 文件中,我希望将 与 匹配charlie-db-staging-loadtestcharlie-db-staging-loadtest-8dec2021同一行中。

我一直不知道下一步该做什么以及如何匹配数据库实例标识符和预留 ID 列之间的文本。更重要的是,如何将匹配的文本移动到同一行。所以到目前为止我还没有尝试解决这个问题。

我愿意使用任何命令,只要它能与 bash 一起工作。我真的很感激命令的细分,因为我将把它应用到一个有点相似但不完全相同的 csv 文件,该文件包含大量数据,这些数据太大而无法放在这里。

我一直在使用 sed 和 awk,但我似乎还无法让它工作。但也许我在这里想到了错误的命令。任何见解都会有帮助。

太感谢了!

答案1

@Thor 绝对正确但如果您急于完成此任务,以便您或其他有类似问题的人将来可以学习如何为自己做这些事情,以下是如何使用任何 awk 和 2-pass 来完成您所要求的操作方法:

$ cat tst.awk
BEGIN { FS=OFS="," }
NR == FNR {
    id = $2
    sub(/-[^-]+$/,"",id)
    vals[id] = $2 OFS $3
    next
}
{ print (FNR>1 ? $1 OFS vals[$1] : $0) }

$ awk -f tst.awk file file
DB Instance Identifier,Reservation ID,State
alpha-db-dev,alpha-db-dev-26aug2022,active
alpha-db-prod,alpha-db-prod-26aug2022,active
alpha-db-staging,alpha-db-staging-26aug2022,active
beta-db-dev-primary,
beta-db-prod-primary,
beta-db-prod-replica,
beta-db-staging-primary,
charlie-db-dev,charlie-db-dev-8dec2021,active
charlie-db-prod-dms,
charlie-db-prod-dms-replica,
charlie-db-staging,
charlie-db-staging-loadtest,charlie-db-staging-loadtest-8dec2021,active

我认为它在做什么是非常明显的,但是如果在阅读手册页、谷歌搜索、添加print语句来跟踪变量值等之后(这样你就可以了解更多有关 awk 的一般信息),你无法弄清楚,那么只需提出具体问题在评论中,我很乐意回答。要总体学习 awk,请获取 Arnold Robbins 所著的《Effective AWK 编程》第 5 版一书。

相关内容