다음을 통해 데이터를 얻습니다.
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
다음 규칙에 따라 지도를 어떻게 만들 수 있나요?
_backup
끝에서 제거staging_
처음부터 삭제- 이제 매핑을 확인하세요.
결과는 다음과 같습니다. 모든 테이블에 스테이징 및 백업이 있어야 하는 것은 아니며, 이 경우 이러한 필드는 비어 있어야 합니다.
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
출력의 개별 줄에 있는 필드 순서는 원본 파일의 줄 순서에 따라 결정됩니다.