기본적으로 다음 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의 배열에 각 필드가 있는지 확인하고 해당하는 경우 대체합니다. 그런데 소문자 "주소"를 대문자로 바꿨습니다.