텍스트 처리: 한 줄의 문자열을 해당 문자열로 대체

텍스트 처리: 한 줄의 문자열을 해당 문자열로 대체

나는 이것을 입력 파일로 가지고 있습니다

파일 1

Red + Yellow = Orange; Yellow + Blue = Green; Blue + Red = Violet

파일 2

Red;1
Yellow;2
Blue;3

저는 이것을 유닉스 환경에서 하고 있습니다.

산출

파일 3

1 + 2 = Orange; 2 + 3 = Green; 3 + 1 = Violet

답변1

awk 'NR == FNR { # First file
    split($0,a,/;/)
    #print "change " a[1] "to " a[2]
    change[a[1]]=a[2]
}
NR != FNR {
    for (i=1;i<NF;i++) {
            if ($i in change) {
                    $i=change[$i]
            }
    }
    print
}' file2 file1

awk 관용구 NR != FNR을 사용하여 이것이 첫 번째 파일인지 두 번째 파일인지 확인하세요. 첫 번째 파일인 경우 줄을 분할 ;하고 변경 사항 배열에 지도를 저장합니다. 두 번째인 경우 입력 필드를 반복하고 일치하는 항목이 있으면 올바른 변경 사항으로 바꿉니다. 마지막으로 결과를 인쇄합니다.

답변2

#!/bin/bash

IFS=";"
while read NAME VALUE
do
    sed -i "s/${NAME}/${VALUE}/g" file1
done < file2

관련 정보