Text-Processing
如何根據子字元串映射數據?
我有以下方式的數據:
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
以下
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
各個輸出行中欄位的順序由原始文件中行的順序決定。