2010-12-23 1 views

Antwort

0

Sind alle alten Einträge vom Typ Mob: y? Wenn ja, dann müssen Sie Ihren Ersatz nicht unbedingt Loc: x zuordnen, da der Mob-Datensatz bereits eindeutig ist.

Wenn dies ausreichend ist, können Sie verwenden:

perl -p -i-bkup -e 's/Mob: y/Mob: 0001/g' FILE 
0

Hier ist eine schnelle und unsaubere Skript Sie verwenden können:

#!/usr/bin/perl 

die "Use: replace.pl <file> <list1> <list2>" unless $#ARGV==2; 

open LIST1, $ARGV[1] or die $ARGV[1].": $!"; 
open LIST2, $ARGV[2] or die $ARGV[2].": $!"; 
open FILE, $ARGV[0] or die $ARGV[0].": $!"; 

while (<LIST1>) { 
    chomp; 
    $key=$_; 
    $value=<LIST2>; 
    chomp $value; 
    $hash->{$key}=$value; 
} 

while (<FILE>) { 
    if (/^Loc: (.*)/) { 
    $repl=$hash->{$1}; 
    } 
    if (/^Mob: (.*)/ and defined $repl) { 
    s/Mob: (.*)/Mob: $repl/; 
    $repl=undef; 
    } 

    print; 
} 

close LIST1; 
close FILE; 
close LIST1; 

Eine Hoffnung, die ich gut verstanden, was Sie versuchen zu erreichen, . Dieses Skript druckt das Ergebnis auf stdout und ändert nicht die Zeilen, die kein entsprechendes Muster in den Listen haben. Außerdem wird davon ausgegangen, dass die Listen die gleiche Größe haben und insgesamt wenig zur Fehlervermeidung beitragen.

Verwandte Themen