我有一个如下所示的数据文件:
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_ref
,max_retl_len
,min_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