다음과 같은 데이터 파일이 있습니다.
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
2 의 접두사에 있는 수십 개의 유사한 접두사 값). 2열의 값에서 1열의 값을 빼고 그 결과로 2열을 채워야 할 것 같습니다. 이는 파일의 각 레코드에 대해 동적으로 수행되어야 합니다.max_retl_len
min_min_ref
몇 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