• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Perl Programm zum Auslesen einer Textdatei

byron1778

Hacker
Hallo,

ich möchte folgendes versuchen.
Ich habe an die 100 *.txt Dateien zu bearbeiten.
In denen stehen die Daten unserer einzelnen Citrix - Server.
Und für jeden dieser Server gibt es eine eigene Datei, in dem das OS, Anzahl der Festplatten, Seriennummer usf. drinnen steht.

Jetzt ist es so, daß sich natürlich die Server in kleinen Punkten voneinander unterscheiden, zB: Seriennummer.

Ich will nun unter Verwendung einer foreach - Schleife die Datei durchgehen und die Zeile mit der Anzahl an Festplatten und der Seriennummer bis zum Zeilenende durchgehen und nur diese Sachen auslesen!

Ist soetwas möglich und wenn wie kann ich es realisieren.

Für Rätschläge wäre ich sehr dankbar!

Mfg
Bernd
 

TeXpert

Guru
byron1778 schrieb:
Ist soetwas möglich und wenn wie kann ich es realisieren.

klar ist das möglich erst mal Bash-pseudocode

Code:
for file in *
do
        while read line 
        do
            wenn line auf Bedingung matched dann 
                  extrahiere Informationen und schreibe auf stdout
        done < $file
done


mit perl gehts ähnlich.
 
OP
B

byron1778

Hacker
Ok, danke Dir!

Werde mir es ansehen, wie ich das in Perl hinbekomme, dass er dann die ganze Zeile ausliest.

Muss das leider auf einer Windows - Kiste zum Laufen bringen.

Danke jedenfalls

Lg
Bernd
 

nobbiew

Hacker
Code:
#!/usr/bin/perl
use strict;
foreach my $file (@ARGV) {
   open FILE, "$file" or (warn "$file:$!" and next);
   my @text = <FILE>;
   close FILE;
   foreach my $line ( @text ) {
     if ( $line =~ /VERGLEICH/ ) {
       VERABEITUNG_DER_ZEILE
     }
   }
}
So sieht in Perl das grobe Gerüst aus.

Und zum Thema Machbar. Ich kenne nichts was perl bei der Verarbeitung von ASCII-dateien nicht kann. Das liegt einzig und allein an der Phantasie des Programmiers.
 
OP
B

byron1778

Hacker
Danke Euch vielmals!

Habe auch schon eine Lösung gefunden.
Das einzige was nicht so hingehauen hat, war nach dem OS zu suchen.

Sobald ich Ihm angebe, er soll Windows 2000 suchen, gibt er alle Zeilen aus, in denen er das findet.
Somit muss ich Ihm das händisch wohl eintragen!

Bei der Seriennummer ging es einfacher, weil die kommt im gesamten Dokument nur einmal vor!

#!/bin/perl -w

print "Zum Auslesen eines SURVEY.txt Textes\n";

open(Datei, " < /ntcit100.txt") || die ("Unbekannte Datei");
open(Datei2, " > /Text.txt");

@DAT=(<Datei>);

close(Datei);

foreach (@DAT)
{
if ( / irgendein Text\s/ )
{
# print $_ . "\n";
print Datei2 $_;
}
}

close (Datei2);
 
OP
B

byron1778

Hacker
Hallo,

habe den regulären Ausdruck schon gefunden, um das Problem zu umgehen.

Danke trotzdem für die großartige Hilfe!

Mfg
Bernd
 

regexer

Advanced Hacker
byron1778 schrieb:
Code:
@DAT=(<Datei>);

close(Datei);

foreach (@DAT)
{
        if ( / irgendein Text\s/ )
        {
                print Datei2 $_;
        }
}
close (Datei2);
Eine kleine Anmerkung: Es ist in diesem Fall unnötig die Gesamte Datei in ein Array zu lesen um dann anschließend Zeilenweise durchzulesen. Folgendes würde Hauptspeicher sparen:
Code:
while (<Datei>) {
        if ( / irgendein Text\s/ )
        {
                print Datei2 $_;
        }
}
 
Oben