다른 파일 값을 기반으로 열의 문자열 바꾸기

다른 파일 값을 기반으로 열의 문자열 바꾸기

입력 파일:

col01 20083d70-1bf0-40f4-9df9-6247d587c085 text text
col02 d233d76d-e60d-442e-9b44-f0e1dc9ebefb text text
col03 20083d70-1bf0-40f4-9df9-6247d587c085 text text
col04 20083d70-1bf0-40f4-9df9-6247d587c085 text text
col05 b26063fa-93e4-414d-82f2-7c2924c81cc6 text text
col06 dc3e2f9b-05bf-49b4-a63e-c4bc09524eb3 text text
col07 d9f5cf1d-a8f9-488d-b088-b7ad00b67ec6 text text
col08 b26063fa-93e4-414d-82f2-7c2924c81cc6 text text
col09 d9a558ff-494a-4ada-8ec2-e9b2f9178599 text text
col10 b26063fa-93e4-414d-82f2-7c2924c81cc6 text text
col11 b26063fa-93e4-414d-82f2-7c2924c81cc6 text text
col12 4d78f804-18f6-4cc8-98a3-c4aedc60aebf text text
col13 0fe487fe-2ff2-4ca4-adf8-de3c19115dde text text
col14 581207a4-f4a5-4373-806b-0e1f7c298bb1 text text

참조 문서:

0fe487fe-2ff2-4ca4-adf8-de3c19115dde group1
20083d70-1bf0-40f4-9df9-6247d587c085 group2
4d78f804-18f6-4cc8-98a3-c4aedc60aebf group3
581207a4-f4a5-4373-806b-0e1f7c298bb1 group4
b26063fa-93e4-414d-82f2-7c2924c81cc6 group5
d233d76d-e60d-442e-9b44-f0e1dc9ebefb group6
d9a558ff-494a-4ada-8ec2-e9b2f9178599 group7
d9f5cf1d-a8f9-488d-b088-b7ad00b67ec6 group8
dc3e2f9b-05bf-49b4-a63e-c4bc09524eb3 group9

예상 출력:

col01 20083d70-1bf0-40f4-9df9-6247d587c085(group2) text text
col02 d233d76d-e60d-442e-9b44-f0e1dc9ebefb(group6) text text
col03 20083d70-1bf0-40f4-9df9-6247d587c085(group2) text text
col04 20083d70-1bf0-40f4-9df9-6247d587c085(group2) text text
col05 b26063fa-93e4-414d-82f2-7c2924c81cc6(group5) text text
col06 dc3e2f9b-05bf-49b4-a63e-c4bc09524eb3(group9) text text
col07 d9f5cf1d-a8f9-488d-b088-b7ad00b67ec6(group8) text text
col08 b26063fa-93e4-414d-82f2-7c2924c81cc6(group5) text text
col09 d9a558ff-494a-4ada-8ec2-e9b2f9178599(group7) text text
col10 b26063fa-93e4-414d-82f2-7c2924c81cc6(group5) text text
col11 b26063fa-93e4-414d-82f2-7c2924c81cc6(group5) text text
col12 4d78f804-18f6-4cc8-98a3-c4aedc60aebf(group3) text text
col13 0fe487fe-2ff2-4ca4-adf8-de3c19115dde(group1) text text
col14 581207a4-f4a5-4373-806b-0e1f7c298bb1(group4) text text

sed -i이제 루프 를 사용하여 이를 달성할 수 있습니다 while.

$ cat reference|while read a b;do sed -i s/"$a"/"$a($b)"/ input;done

while 루프 없이 awk만 사용하고 단일 awk 명령 프로세스에서 입력 및 참조 파일을 사용하여 두 번째 열의 값만 변경하는 더 간단한 방법으로 수행할 수 있습니까?

답변1

다음 방법은 순전히 awk-를 기반으로 하며 외부 루프를 피합니다.

awk 'FNR==NR {key[NR]=$1; ref[NR]=$2; n_refs++; next} {for (i=1;i<=n_refs;i++) if ($2==key[i]) $2=key[i]"("ref[i]")"; print}' reference input

이는 먼저 "참조" 파일을 처리하고 해당 파일에서 UUID-"그룹 nr" 쌍(실제로 해당 항목이 있는 두 개의 배열) 목록을 생성합니다.

이 파일이 처리되고( 글로벌 레코드 번호 FNR와 구별되는 파일별 레코드 번호 로 표시됨 NR) "주 입력 파일"이 처리되면 발견된 모든 연결을 반복하여 현재 콘텐츠를 추가합니다. 등록된 모든 UUID와 비교하여 두 번째 열의 UUID를 얻습니다.

관련 정보