jq 명령의 출력을 연결하는 데 문제가 있습니다.jq를 사용하여 JSON 파일을 구문 분석하고 CSV로 변환 - 2개의 열을 하나로 병합 |
그래서 CSV 파일을 검색하고 여러 전략으로 컬럼을 병합하는 것이 가능한지 궁금합니다. 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"
여러 정책이 포함된 열을 하나로 결합하고(쉼표를 -로 대체) 각 역할의 첫 번째와 마지막(첫 번째 열) 사이의 문자열에서 따옴표를 제거하려면 어떻게 해야 합니까 "aws-elasticbeanstalk-ec2-role","AWSElasticBeanstalkWebTier","AWSElasticBeanstalkMulticontainerDocker","AWSElasticBeanstalkWorkerTier"
?
"aws-elasticbeanstalk-ec2-role","AWSElasticBeanstalkWebTier-AWSElasticBeanstalkMulticontainerDocker-AWSElasticBeanstalkWorkerTier"
~을 위한
"aws-elasticbeanstalk-service-role","AWSElasticBeanstalkEnhancedHealth","AWSElasticBeanstalkService",
"aws-elasticbeanstalk-service-role","AWSElasticBeanstalkEnhancedHealth-AWSElasticBeanstalkService"
Lambda_api_gateway와 동일
모든 행의 공통점은 arn:aws:iam 문자열이 누락되었다는 것입니다. arn:aws 문자열이 없고 여러 정책이 있는 행을 어떻게 감지합니까?
답변1
알아내기 위해 텍스트 편집기를 사용할 필요가 없습니다. 동일한 열에 있는 여러 값은 다음과 같이 표시됩니다.--
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