Wer kann mir ein paar Zeilen programieren?

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

#!/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

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

::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 :wink:

Gruss,

-Andreas.