
다음 출력을 다음과 같이 조작하고 싶습니다.
산출:
S* 0.0.0.0/0 [1/0] via 1.1.1.1, MAR-LNK-VGL_DSL
[1/0] via 2.2.2.2, MAR-LNK-GVT_DSL
[1/0] via 3.3.3.3, ENT-LNK-OI_CORP
[1/0] via 4.4.4.4, ENT-EBT_CORP, [10/0]
S 10.0.0.0/16 [10/0] via 5.5.5.5, ENT-LNK
C 10.5.10.0/24 is directly connected, MAR-DEV-LAN
C 10.5.20.0/24 is directly connected, MAR-DEV-DMZ
C 10.5.30.0/24 is directly connected, MAR-DEV-BALANCE
C 10.6.40.0/28 is directly connected, BNC-HOM
C 10.6.40.3/32 is directly connected, BNC-HOM
B 10.7.0.0/21 [20/100] via 6.6.6.6, vpn-21fce533-0, 03:12:51
S 10.19.210.56/29 [10/0] via 7.7.7.7, MAR-EMB_MPLS
S 10.19.233.0/24 [10/0] is directly connected, VPN-HML-PP
S 10.19.252.0/24 [5/0] is directly connected, VPN-CON
B 10.19.254.0/24 [20/0] via 8.8.8.8, ENT_EBT_MPLS, 4d20h13m
S 10.20.0.4/32 [10/0] is directly connected, VPN-AX4B
S 10.33.13.70/32 [10/0] is directly connected, VPN-NEW
B 10.50.0.0/17 [20/0] via 9.9.9.9, SEC-EQNX, 00:02:11
B 10.50.128.0/17 [20/0] via 9.9.9.9, SEC-EQNX, 00:02:11
O 100.0.153.164/32 [110/200] via 99.1.152.61, HUB-MAR-03_79, 17:36:22
[110/200] via 99.1.101.217, HUB-MAR-04_54, 17:36:22
[110/200] via 99.1.101.153, HUB-MAR-04_38, 17:36:22
[110/200] via 99.1.151.13, HUB-MAR-03_3, 17:36:22
O 100.0.252.11/32 [110/200] via 99.1.151.109, HUB-MAR-03_15, 03:22:24
[110/200] via 99.1.102.17, HUB-MAR-04_68, 03:22:24
100.0.153.164/32를 필터링하면 다음 출력이 인쇄됩니다.
O 100.0.153.164/32 [110/200] via 99.1.152.61, HUB-MAR-03_79, 17:36:22
[110/200] via 99.1.101.217, HUB-MAR-04_54, 17:36:22
[110/200] via 99.1.101.153, HUB-MAR-04_38, 17:36:22
[110/200] via 99.1.151.13, HUB-MAR-03_3, 17:36:22
0.0.0.0/0을 필터링하면 출력은 다음과 같습니다.
S* 0.0.0.0/0 [1/0] via 1.1.1.1, MAR-LNK-VGL_DSL
[1/0] via 2.2.2.2, MAR-LNK-GVT_DSL
[1/0] via 3.3.3.3, ENT-LNK-OI_CORP
[1/0] via 4.4.4.4, ENT-EBT_CORP, [10/0]
10.20.0.4/32와 같은 항목을 필터링하면 출력은 다음과 같습니다.
S 10.20.0.4/32 [10/0] is directly connected, VPN-AX4B
그런데 제가 잘 못해서 잘 모르겠네요 :(
답변1
두 번째 필드의 특정 문자열을 일치시키고 해당 문자열이 일치한 후 "연속 줄"을 인쇄하려면 이 awk 스크립트를 사용해 보세요.
awk -v fltr="_str_" 'BEGIN {havematch=0}
{if ($1 ~ /^----/) {
if (havematch == 1) {
print $0
}
next
}
if ($2 == fltr) {
print $0
havematch=1
next
}
{havematch=0}
}' _file_
읽기 쉽도록 나누어 보았습니다.
기본적으로 처음에는 일치하는 항목이 없으므로 havematch 변수를 0으로 초기화하는 것부터 시작합니다. 그런 다음 줄이 "----"로 시작하는지 확인합니다. 만약 그렇다면 havematch 변수가 설정되어 있고 이 줄은 "계속 줄"이므로 인쇄합니다. 줄이 "----"로 시작하는 경우 havematch가 0으로 설정되면 이는 다른 것에 대한 연속 라인입니다. 인쇄하지 마세요. 어느 쪽이든 행이 "----"로 시작하면 havematch 확인 후 다음 행으로 이동합니다.
줄의 두 번째 필드가 필터 문자열과 일치하면 해당 줄을 인쇄하고 havematch 변수를 1로 설정합니다. 다음 줄로 이동하세요.
행이 연속 행이 아니고 두 번째 필드가 필터 문자열과 일치하지 않으면 해당 행은 일치하지 않으며 연속 행을 인쇄하지 않으려는 것입니다. 따라서 havematch 변수를 0으로 설정하십시오.
도움이 되었기를 바랍니다.