Colunas Bash-search e replace-Merge no arquivo CSV

0

Eu tenho problemas Concatenando a saída do comando jq- Analisando arquivo JSON usando jq, converta-o em CSV - combine 2 colunas em uma | Estouro de pilha

Então, pergunto-me se é possível pesquisar o arquivo CSV e mesclar colunas com várias políticas. Aqui está o arquivo CSV:

"ADFS-Administrators","Administrator-Access","arn:aws:iam::279052847476:saml-provider/CompanyADFS"
"ADFS-amtest-ro","pol-amtest-ro","arn:aws:iam::279052847476:saml-provider/CompanyADFS"
"adfs-host-role","pol-amtest-ro",
"aws-elasticbeanstalk-ec2-role","AWSElasticBeanstalkWebTier","AWSElasticBeanstalkMulticontainerDocker","AWSElasticBeanstalkWorkerTier",
"aws-elasticbeanstalk-service-role","AWSElasticBeanstalkEnhancedHealth","AWSElasticBeanstalkService",
"AWSAccCorpAdmin","AdministratorAccess","arn:aws:iam::279052847476:saml-provider/LastPass"
"lambda_api_gateway_twilio_processor","AWSLambdaBasicExecutionRole-f47a6b57-b716-4740-b2c6-a02fa6480153","AWSLambdaSNSPublishPolicyExecutionRole-d31a9f16-80e7-47c9-868a-f162396cccf6"

Como mesclar colunas com várias políticas em uma (substituir vírgulas com -) e remover aspas nas seqüências de caracteres entre a primeira e a última para cada função (primeira coluna) "aws-elasticbeanstalk-ec2-role","AWSElasticBeanstalkWebTier","AWSElasticBeanstalkMulticontainerDocker","AWSElasticBeanstalkWorkerTier" A saída deve ser

"aws-elasticbeanstalk-ec2-role","AWSElasticBeanstalkWebTier-AWSElasticBeanstalkMulticontainerDocker-AWSElasticBeanstalkWorkerTier"

Para

"aws-elasticbeanstalk-service-role","AWSElasticBeanstalkEnhancedHealth","AWSElasticBeanstalkService",

"aws-elasticbeanstalk-service-role","AWSElasticBeanstalkEnhancedHealth-AWSElasticBeanstalkService"

mesmo para lambda_api_gateway

Comum para todas as linhas é que arn: aws: iam string está faltando. Como detectar linhas sem arn: aws string e com várias políticas?

    
por Milister 14.03.2018 / 11:27

1 resposta

0

Encontrou uma resposta sem precisar usar o editor de texto: vários valores nas mesmas colunas serão separados por --

jq -rc '.RoleDetailList | map(select((.AssumeRolePolicyDocument.Statement | length > 0) and (.AssumeRolePolicyDocument.Statement[].Principal.Federated) or (.AttachedManagedPolicies | length >0) or (.RolePolicyList | length > 0)) )[]  | [.RoleName,([.RolePolicyList[].PolicyName,([.AttachedManagedPolicies[].PolicyName] | join("--"))] | join(" ")),(.AssumeRolePolicyDocument.Statement[] | .Principal.Federated)] | @csv' output.json
    
por 14.03.2018 / 13:56