以下からデータを取得します。
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
出力の個々の行のフィールドの順序は、ソースファイルの行の順序によって決まります。