[Perl] Zwei Arrays an Element 1 vergleichen


chill0r55555

Mitglied
Hallo,

ich habe zwei Arrays die wie folgt aufgebaut sind:

Code:
my @zeilencontent = ("127.0.0.1","host");
my @zeilencontent2= ("129.1.4.1","host","kommentar");
Jetzt möchte ich wie folgt vorgehen. Ich möchte die beiden Arrays an der Stelle 1 vergleichen. Also an der Stelle wo "host" steht. Leider komme ich nicht drauf wie ich das machen kann.

Habs schon so versucht:

Code:
foreach my $eintrag1(@zeilencontent)
{
  foreach my $eintrag2(@zeilencontent2)
  {
    if(@{$zeilencontent[$eintrag1]}->[1] eq @{$zeilencontent2[$eintrag2]}->[1]){
	 print "treffer-$eintrag1-$eintrag2\n";
	 }
  }
}
Leider geht der Code nicht. Kann mir da einer weiterhelfen?
 
ich habe zwei Arrays die wie folgt aufgebaut sind:

Code:
my @zeilencontent = ("127.0.0.1","host");
my @zeilencontent2= ("129.1.4.1","host","kommentar");
Jetzt möchte ich wie folgt vorgehen. Ich möchte die beiden Arrays an der Stelle 1 vergleichen. Also an der Stelle wo "host" steht. Leider komme ich nicht drauf wie ich das machen kann.
Ich weiß nicht ob ich dein Problem richtig verstanden habe, aber ginge das nicht einfach so?
Perl:
if ($zeilencontent[1] eq $zeilencontent2[1]) {
    print "Treffer\n";
}
Grüße, Matthias
 
Zuletzt bearbeitet:

chill0r55555

Mitglied
Hallo Matthias,

leider funktioniert das nicht. Ich poste vllt. lieber mal mein ganzes Skript.


Code:
#!/usr/bin/perl -w

use strict;

my $datei="datei1.txt";
my $datei2="datei2.txt";
my $kommentar = '#';
my @zeilencontent = ();
my $zeilencontent;
my @zeilencontent2 = ();
my $zeilencontent2;

open (IN,'<',"$datei") || die $!;
	while (<IN>){
		chomp;
		my $akt_zeile=$_;
		if($akt_zeile !~ /$kommentar.*/) {
				  @zeilencontent = split(/\t/, $akt_zeile);
				  open (IN2,'<',"$datei2") || die $!;
				  while (<IN2>){
				  		  chomp;
				  		  my $akt_zeile2=$_;
				  		  if($akt_zeile2 !~ /$kommentar.*/) {
					  		  @zeilencontent2 = split(/\t/, $akt_zeile2);

if ($zeilencontent[1] eq $zeilencontent2[1]) {
    print "Treffer---$zeilencontent[1]-----$zeilencontent2[1]\n";
}

						  }	  
				  }
				  close IN2;	
		}
	}
close IN;
datei1.txt
Code:
# kommentar
# kommentar 2
1.2.3.4<TAB>host

datei2.txt
Code:
#bla
#asd

134.3.5.19<TAB>host

Ich bekomme dann die Meldung:

Code:
Use of uninitialized value in string eq at ./neu.pl line 26, <IN2> line 3.
Treffer---host-----host
Use of uninitialized value in string eq at ./neu.pl line 26, <IN2> line 6.
 

chill0r55555

Mitglied
Weist du zufällig wie ich Leerzeilen mit regex rausfiltern kann?

Habs gerade mit folgendem versucht, aber klappt leider nicht:

Perl:
if(($akt_zeile !~ /$kommentar.*/) ||  ($akt_zeile !~ /^\s+$/)) {
EDIT:

Ich habe es jetzt nach dem chmop so gemacht:
Perl:
if (m/^\s*$/) { next; }
Das funktioniert super.
 
Zuletzt bearbeitet:

Neue Beiträge