Ausgabe manipulieren - awk | sed | grep

569
Douglas

Ich möchte folgende Ausgabe folgendermaßen manipulieren:

Ausgabe:

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 

Wenn ich nach 100.0.153.164/32 filtern würde, würde es die folgende Ausgabe drucken:

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 

Wenn ich nach 0.0.0.0/0 filtern würde, würde die Ausgabe lauten:

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] 

Und wenn ich nach 10.20.0.4/32 filtern würde, würde die Ausgabe folgendermaßen lauten:

S 10.20.0.4/32 [10/0] is directly connected, VPN-AX4B 

Aber ich bin nicht gut damit, also kann ich es nicht verstehen :(

-1
Wünschen Sie nur eine genaue Übereinstimmung oder benötigen Sie das Programm, um Netzwerke und Subnetze zu verstehen? grawity vor 5 Jahren 0
Nehmen wir an, ich führe diesen Befehl mit einem grep aus - "router info routing all | grep 0.0.0.0" - Die Ausgabe wäre: - "S * 0.0.0.0/0 [1/0] über 1.1.1.1, MAR- LNK-VGL_DSL "- Ich werde nur den Pfad über 1.1.1.1 sehen, aber tatsächlich kann ich auch über 2.2.2.2, 3.3.3.3 und 4.4.4.4 auf 0.0.0.0 zugreifen. Ich möchte etwas, das mir alle Wege zeigt, über jeden einzelnen nächsten Sprung, der möglich ist. Ich möchte es einfach ausdrucken. Douglas vor 5 Jahren 0
Möchten Sie nur etwas, das eine Zeichenfolge im zweiten Feld angibt (z. B. 0.0.0.0/0) und diese Zeile ausgibt, und wenn die Zeile mit "-----" beginnt und Sie bereits mit der vorherigen Zeile übereinstimmen, die mit "-----" beginnende Zeile ausdrucken? Lewis M vor 5 Jahren 0
Ich dachte in etwas wie, drucke alles von der Zeile aus, die ich mit einer bestimmten Zeichenfolge übereinstimme (zB 0.0.0.0/0), und halte an, wenn etwas in der 1ª-Spalte (wie S, O, C oder B) von a ist Neue Zeile. Douglas vor 5 Jahren 0
[MCVE] (https://stackoverflow.com/help/mcve) Thor vor 5 Jahren 0

1 Antwort auf die Frage

0
Lewis M

Wenn Sie eine bestimmte Zeichenfolge im zweiten Feld abgleichen möchten und "Fortführungszeilen" ausdrucken möchten, nachdem diese Zeichenfolge übereinstimmt, versuchen Sie es mit diesem awk-Skript.

awk -v fltr="_str_" 'BEGIN   next } if ($2 == fltr) { print $0 havematch=1 next }  }' _file_ 

Ich habe es aufgeteilt, um das Lesen zu erleichtern.

Grundsätzlich beginnen Sie mit der Initialisierung der Variablen "havematch" auf null, da Sie zu Beginn keine Übereinstimmungen haben. Dann prüfen Sie, ob eine Zeile mit "----" beginnt. Wenn dies der Fall ist und die Variable "havematch" gesetzt ist, drucken Sie diese Zeile aus, da es sich um eine "Fortsetzungszeile" handelt. Wenn die Zeile mit "----" beginnt und die Havarie ist auf Null gesetzt, dann ist dies eine Fortsetzung für etwas anderes. Drucken Sie es nicht aus. Wenn die Zeile mit "----" beginnt, gehen Sie nach der Havarieprüfung zur nächsten Zeile.

Wenn das zweite Feld in der Zeile mit Ihrer Filterzeichenfolge übereinstimmt, drucken Sie die Zeile aus und setzen Sie die Variable "havematch" auf "1". Fahren Sie mit der nächsten Zeile fort.

Wenn es sich bei der Zeile nicht um eine Fortführungszeile handelt und das zweite Feld nicht mit Ihrer Filterzeichenfolge übereinstimmt, stimmt diese Zeile nicht überein, und Sie möchten keine Folgezeilen drucken. Setzen Sie also die Havematch-Variable auf Null.

Hoffe das hilft.

Danke mann!! : D Douglas vor 5 Jahren 0
Bitte. Denken Sie daran, wenn es Ihnen gefällt und es eine akzeptable Antwort ist, stimmen Sie es bitte ab und akzeptieren Sie es als Antwort. Vielen Dank. Lewis M vor 5 Jahren 0