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

관련 정보