두 개의 파일이 있는데 첫 번째 파일은 file1
라우터 구성을 포함하는 1000줄입니다. 일부는 이렇습니다 -
!
ipv6 prefix-list CCAV6 seq 5 permit 2217:AB23::/40
route-map DENY-ALL deny 11
!
ip pim sparse-mode
ipv6 address 2617:FB23:0:1::1/128
ipv6 ospf 1 area 0.0.0.0
등. 두 번째 파일은 file2
ipv6을 ipv4 주소로 매핑하는 것입니다. 그것은 다음과 같습니다 -
2617:FB23:0:1::1/128 245.82.242.31/32
2217:AB23::/40 64.211.7.157/31
반복적으로 교체할 수 있기를 원합니다 file1
. 첫 번째 열이 file2
일부와 일치 하면 file1
두 번째 열로 바꿔야 합니다.file2
예를 들어 처리 후 표시될 것으로 예상되는 출력은 다음과 같습니다.
!
ipv6 prefix-list CCAV6 seq 5 permit 64.211.7.157/31
route-map DENY-ALL deny 11
!
ip pim sparse-mode
ipv6 address 245.82.242.31/32
ipv6 ospf 1 area 0.0.0.0
을 사용해 보았지만 awk
내가 접한 모든 옵션에는 복사할 위치에 대한 사전 지식이 필요한 것 같고 첫 번째 열의 위치가 프로세스 전반에 걸쳐 일정하게 유지되지 않습니다 file1
. 몇 가지 아이디어를 주시면 감사하겠습니다.
답변1
다중 공백/탭 필드 구분 기호가 file1
단일 공백으로 대체되는 것에 대해 크게 걱정하지 않는 경우:
awk 'NR == FNR{a[$1]=$2; next};
{for (i=1; i<=NF; ++i) printf "%s%s", $i in a?a[$i]: $i, i == NF?"\n": " "}' file2 file1
생산하다
!
ipv6 prefix-list CCAV6 seq 5 permit 64.211.7.157/31
route-map DENY-ALL deny 11
!
ip pim sparse-mode
ipv6 address 245.82.242.31/32
ipv6 ospf 1 area 0.0.0.0
답변2
다음 스크립트는 처음 두 단어를 각각 해시로 읽은 다음 IPV4를 IPV6으로 바꾸고 다른 패턴 확인을 중지합니다. 같은 줄에 두 개의 주소가 있을 수 있다고 생각되면 if (j>0) break
코드에서 해당 주소를 제거합니다.
혼합된 주소 코드
#!/usr/bin/nawk -f
BEGIN{while (getline<"map"){w[$1]=$2}}
{for (a in w){
j=gsub(a,w[a])
if (j>0) break
}
print
}
지도 파일
2617:FB23:0:1::1/128 245.82.242.31/32
2217:AB23::/40 64.211.7.157/31
호스트 파일
!
ipv6 prefix-list CCAV6 seq 5 permit 2217:AB23::/40
route-map DENY-ALL deny 11
!
ip pim sparse-mode
ipv6 address 2617:FB23:0:1::1/128
ipv6 ospf 1 area 0.0.0.0
구현하다
mixaddr hosts
!
ipv6 prefix-list CCAV6 seq 5 permit 64.211.7.157/31
route-map DENY-ALL deny 11
!
ip pim sparse-mode
ipv6 address 245.82.242.31/32
ipv6 ospf 1 area 0.0.0.0
화타이
답변3
#!/bin/bash
IFS=$'\n'
line=`cat ./file2`
for var in $line
do
string1=`echo $var |awk '{print $1}'`
string2=`echo $var |awk '{print $2}'`
sed -i "s#${string1}#${string2}#g" ./file1
done
file1
실행하기 전에 백업이 필요합니다.