다른 파일의 값을 입력으로 사용하여 파일을 편집하고 파일 편집 내용을 다른 파일로 리디렉션

다른 파일의 값을 입력으로 사용하여 파일을 편집하고 파일 편집 내용을 다른 파일로 리디렉션

기본적으로 다음 Data.txt가 포함된 파일이 있습니다.

<IP Address1>, 10, 23, <GW IP1>
FINAL INPUT.45.324
<IP Address2>, 40, 33, <GW IP2>

info.txt에 지정된 각 태그의 값이 포함된 또 다른 파일

<IP Address1>10.155.120.20
<GW IP1>10.155.120.30
<IP address2>10.30.123.30
<GW IP2>10.30.123.1

바라건대 다음과 같이 보일 것입니다 (file.txt)

10.155.120.20, 10, 23, 10.155.120.30
FINAL INPUT.45.324
10.30.123.30, 40, 33, 10.30.123.1

예를 찾으려고 노력했지만 알 수 없습니다.

답변1

당신이 찾고 있는 것은 템플릿 엔진이라고 불립니다. 내가 extremly simple not reliable당신을 위해 하나를 만들었습니다. sed를 기반으로 하며 매우 취약할 수 있습니다.

그렇지 않으면 <IP address2>10.30.123.30<IP Address2>10.30.123.30스크립트가 예상대로 작동하지 않습니다. 전체 코드는 다음과 같습니다.

#!/usr/bin/env bash
cat <<EOF >file_1
<IP Address1>, 10, 23, <GW IP1>
FINAL INPUT.45.324
<IP Address2>, 40, 33, <GW IP2>
EOF
cat <<EOF >file_2
<IP Address1>10.155.120.20
<GW IP1>10.155.120.30
<IP Address2>10.30.123.30
<GW IP2>10.30.123.1
EOF
cp file_1 file_final
while read to_split; do
    echo "to_split: $to_split"
    arg1="${to_split%>*}>" # > because it is removed
    arg2="${to_split#*>}"
    echo "1: $arg1"
    echo "2: $arg2"
    sed -i  "s/$arg1/$arg2/g" file_final
done < file_2

스크립트는 자체 포함되어 있으므로 직접 시도해 볼 수 있습니다 :).

문제는 이것이 좋은 해결책이라고 말할 수 없다는 것입니다. 이것진짜해결책은 Jinja2와 같은 템플릿 엔진을 사용하는 것입니다.

답변2

얼마나 멀리 갈 것인가?

awk  '
NR==FNR         {T[$1 FS] = $2
                 next
                }
                {for (i=1; i<=NF; i++) if ($i in T) $i = T[$i]
                }
1
'
FS=">" file2 FS=", " OFS=", " file1
10.155.120.20, 10, 23, 10.155.120.30
FINAL INPUT.45.324
10.30.123.30, 40, 33, 10.30.123.1

이해합니다? file2의 대체 값을 태그로 인덱스된 배열로 수집한 다음, 데이터 file1의 배열에 각 필드가 있는지 확인하고 해당하는 경우 대체합니다. 그런데 소문자 "주소"를 대문자로 바꿨습니다.

관련 정보