csv 파일의 값 정렬

csv 파일의 값 정렬

다음 정보가 포함된 csv 파일이 있는데, 합계 결과를 결합하고 aws rds describe-db-instancesjq aws rds describe-reserved-db-instances를 사용하여 결과를 구문 분석하여 csv 파일을 만든 다음 pastecsv 파일을 함께 저장했습니다.

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

@토르는 정말 옳습니다하지만 당신이나 비슷한 문제가 있는 다른 사람들이 나중에 스스로 이러한 일을 수행하는 방법을 배울 수 있도록 이 작업을 수행하고 싶다면 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판을 읽어보세요.

관련 정보