Hallo,
ich schreibe ein kleines bis mittelgroßes Shellprogramm. Jetzt bin ich aber an einer Stelle angelangt, wo man mit der Shellprogramierung wahrscheinlich nicht weiter kommt. Die Lösung lautet vermutlich AWK.
Folgendes Problem:
Aus diese Datei (normalerweiße halt über 50000 Zeilen)
172.031.208.001 obgdbag1e0 net Cisco 2501 11.1
172.031.193.007 fbgus09000 kwe Win95
172.031.193.005 fbgsr09001 kwe WinNT
172.031.193.004 fbgsr09000 kwe WinNT
172.031.193.001 fbg775e0 net Cisco 2514 11.1
172.031.191.005 bas2 kw CMT5907
172.031.191.001 bas151e0 net Cisco 2501 11.1
soll er in einer Zeile die Variable $Servername finden. Sagen wir mal $Servername=fbgsr09001. Nun soll er von dieser Zeile an weitersuchen bis er die nächste Zeile mit Cisco findet und die zweite Spalte $2 in dem Fall fbg775e0 ausgeben.
Ich verwende die KSH als Shell.
Ich hoffe es kann mir jemand weiterhelfen. Vielen Dank schon mal im vorraus.
Gruß Steffen
Anonym
2. Januar 2001 um 16:30
2
#!/usr/bin/perl
$servercode\_to\_search="fbgsr09001";
$servername\_to\_search="Cisco";
$file\_to\_search="~/logs/mylog";
$loop=1;
#
open INF, " && $loop) {
$line=~s/\s+/,/g; #alle weißzeichen durch ein einzelnes komma erstzen
my ($ip, $servercode, $domain, $servername, $var1, $var2) = split(",", $line); #die zeile in die felder aufspalten
if ( !$found && $servercode eq $servercode\_to\_search ) { $found=1; } #found=true wenn servercodes übereinstimmen
if ( $found && $servername eq $servercode\_to\_search="fbgsr09001" ) { print "$servercode"; $loop=0; } #ausgabe und schleifenende wenn found=true und servername gefunden
close INF; #datei schließem
Anonym
2. Januar 2001 um 16:34
3
das is ein schneller Hack, der funktionieren müßte. wenn nicht, melde dich bei mir. (syntaxfehler können sich immer einschleichen)
außerdem fehlt ein „}“ am ende der schleife.
cu, holli
Hallo,
viele Dank erstmal für deine Arbeit. Leider gibt es ein kleines Problem in dieser Zeile:
if ( $found && $servername eq
$servercode_to_search=„fbgsr09001“ ) { print „$servercode“;
$loop=0; } #ausgabe und schleifenende wenn found=true und
servername gefunden
Fehlermeldung:
Can’t modify logical and in scalar assignment at ./routersuche line 15, near "„fbgsr09001“ ) "
Die Variable $servercode_to_search würde ich gerne beim Programmstart mit übergeben. Bei Shellprogramierung ist das die $1. Ist das bei Perl genauso?
Vielen Dank
Steffen
Anonym
2. Januar 2001 um 18:52
5
::if ( $found && $servername eq $servercode\_to\_search="fbgsr09001" ) { print "$servercode";
$loop=0; } #ausgabe und schleifenende wenn found=true und
servername gefunden
muß natürlich
if ( $found && $servername eq $servercode\_to\_search ) { print "$servercode"; $loop=0; } #ausgabe und schleifenende wenn found=true und servername gefunden
heißen.
Die Variable $servercode_to_search würde ich gerne beim
Programmstart mit übergeben. Bei Shellprogramierung ist das
die $1. Ist das bei Perl genauso?
so ähnlich. In der Shell werden Parameter im array ARGV gespeichert:
Aufruf: skript.p1 arg1
print $ARGV[0]; #gibt "arg1" aus
cu, holli
Syntaxfehler in Perl aufspueren …
Hallo Markus,
das is ein schneller Hack, der funktionieren müßte. wenn
nicht, melde dich bei mir. (syntaxfehler können sich immer
einschleichen)
… dann lass doch einfach den Perl-Interpreter
die Syntaxueberpruefung uebernehmen:
#!/usr/bin/perl -w -- warnt vor potentiellen Fehlerquellen
use strict; # Interpreter fuehrt Syntaxchecking durch
[programm]
Die obigen 2 Zeilen ersparen Dir und Deinen Alpha-Testern
bestimmt ne Menge unnoetige Postings und „schnelle Hacks“
wirken nun richtig professionell
Gruss,
-Andreas.