하위 문자열을 기반으로 데이터를 매핑하는 방법은 무엇입니까?

하위 문자열을 기반으로 데이터를 매핑하는 방법은 무엇입니까?

다음을 통해 데이터를 얻습니다.

staging_uw_pc_account_contact_role_hive_tb
staging_uw_pc_account_hive_tb
staging_uw_pc_account_location_hive_tb
uw_pc_account_contact_hive_tb
uw_pc_account_contact_hive_tb_backup
uw_pc_account_contact_role_hive_tb
uw_pc_account_contact_role_hive_tb_backup

다음 규칙에 따라 지도를 어떻게 만들 수 있나요?

  1. _backup끝에서 제거
  2. staging_처음부터 삭제
  3. 이제 매핑을 확인하세요.

결과는 다음과 같습니다. 모든 테이블에 스테이징 및 백업이 있어야 하는 것은 아니며, 이 경우 이러한 필드는 비어 있어야 합니다.

uw_pc_account_contact_role_hive_tb, uw_pc_account_contact_role_hive_tb_backup, staging_uw_pc_account_contact_role_hive_tb

답변1

다음 스크립트는 각 입력 줄에서 접두사 및/또는 접미사 awk의 존재를 감지합니다.staging__backup

접두사와 접미사가 있으면 제거되고 나머지 문자열은 라는 연관 배열의 키로 사용됩니다 map.

원래 행은 map생성된 키와 연관된 쉼표로 구분된 문자열로 배열에 저장됩니다.

마지막으로 map전체 내용을 인쇄해 보세요.

BEGIN {
        OFS = ", "
        prefix = "staging_"
        suffix = "_backup"
}

{
        key = $0
        sub("^" prefix, "", key)
        sub(suffix "$", "", key)

        map[key] = (map[key] == "" ? $0 : map[key] OFS $0)
}

END {
        for (key in map) print map[key]
}

파일의 문제 데이터를 사용하여 테스트를 실행합니다 file.

$ awk -f script file
staging_uw_pc_account_location_hive_tb
staging_uw_pc_account_hive_tb
uw_pc_account_contact_hive_tb, uw_pc_account_contact_hive_tb_backup
staging_uw_pc_account_contact_role_hive_tb, uw_pc_account_contact_role_hive_tb, uw_pc_account_contact_role_hive_tb_backup

출력의 개별 줄에 있는 필드 순서는 원본 파일의 줄 순서에 따라 결정됩니다.

관련 정보