从 col2 中减去 col1 中的字符串值并填充 col2

从 col2 中减去 col1 中的字符串值并填充 col2

我有一个如下所示的数据文件:

MASTER          APP                        SET       STATUS
max_mstr_ref    max_mstr_ref_horizon_biz   pp_script     true
max_mstr_ref    max_mstr_ref_horizon_biz   pp_scrpt_1    false
max_retl_len    max_retl_len_bddm_biz      px_script     true
min_min_ref     min_min_ref_HZ_Null        ap_script_2   false
...

我需要做的是删除第 2 列中的重复前缀值(例如max_mstr_refmax_retl_lenmin_min_ref以及第 2 列中的前缀中的数十个类似的前缀值)。我认为必须从第 2 列中的值减去第 1 列中的值,然后用结果填充第 2 列。这必须针对文件中的每条记录动态完成。

我尝试了一些awk方法,但还是比较简短。

答案1

这个怎么样

awk '{sub($1"_", "", $2); printf("%s %s %s %s\n", $1, $2, $3, $4)}' _input_file_

这使用第一个字段作为要从第二个字段中删除的正则表达式。然后打印出 4 个字段。我在正则表达式中包含了“_”,因为我认为您不希望这样。您可以调整 printf 格式字符串来美化输出。

答案2

如果该前缀始终存在,请尝试

awk 'NR == 1 || sub ($1 "_", "", $2)' OFS="\t" file
MASTER          APP         SET         STATUS
max_mstr_ref    horizon_biz pp_script   true
max_mstr_ref    horizon_biz pp_scrpt_1  false
max_retl_len    bddm_biz    px_script   true
min_min_ref     HZ_Null     ap_script_2 false

相关内容