Portál AbcLinuxu, 7. června 2025 08:09


Dotaz: porovnani souboru

16.2.2005 10:28 Joe
porovnani souboru
Přečteno: 363×
Odpovědět | Admin
Cau, muzete mi poradit s porovnavanim txt souboru.
1. vstup1

xxx1   yyyyyyy1
xxx2   yyyyyyy2
xxx3   yyyyyyy3


2. vstup2
zzzzzzz1
zzzzzzz2

potrebuju kontrolovat shodu zzzzzzz s yyyyyyy, jestlize jsou cisla shodna, tak do vystupniho soubotu zapsat vsechny 3 hodnoty. ve foru jsem nasel UNIQ a SORT, ale to je asi malo......
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.2.2005 11:43 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: porovnani souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevadí-li, že bys musel ty soubory setřídit podle yyyyy (sort -k2) a zzzzz, tak stačí
join -1 2 -2 1 -o 1.1,1.2,2.1 vstup1 vstup2
16.2.2005 12:28 Joe
Rozbalit Rozbalit vše Re: porovnani souboru
Tak se moc omlouvam, ale sam sem nepochopil co vlastne chci....:-( Takze jeste jednou, a ted uy spravne
1. vstup1

xxx1   yyyyyyy1
xxx2   yyyyyyy2
xxx3   yyyyyyy3


2. vstup2
zzz1   ooooooo1
zzz2   ooooooo2


vstup1 - asi 13000 radku
vstup2 - asi  1000 radku
Potrebuju porovnat oooooo se sloupcem yyyyyyy, jestliye najde shodu napr. yyyyyyy1==oooooo2 tak do vystupniho souboru zapsat radek xxx1 zzz2. Tak se jeste omlouvam za tu prvni (blbou) otazku a diky za napad (ten join se bude hodit pozdeji)
Jiří Svoboda avatar 16.2.2005 12:59 Jiří Svoboda | skóre: 37 | blog: cat /dev/mind | Prostějov
Rozbalit Rozbalit vše Re: porovnani souboru
Pokud je to na nejakou jednorazovou akci a misto umeni programovat ti staci obycejna hruba sila, bude fungovat treba takovyto script v perlu:
#!/usr/bin/perl

open(FHANDLE, "vstup1.txt")
  or die "Nemuzu otevrit vstup1.txt\n";
@vstup1 = <FHANDLE>;
close(FHANDLE);

open(FHANDLE, "vstup2.txt")
  or die "Nemuzu otevrit vstup2.txt\n";
@vstup2 = <FHANDLE>;
close(FHANDLE);

foreach $radek1(@vstup1) {
  foreach $radek2(@vstup2) {
    # neverim chomp(), zvlast pokud jsou DOSove konce radku
    $radek1 =~ s/\n//;
    $radek1 =~ s/\r//;
    $radek2 =~ s/\n//;
    $radek2 =~ s/\r//;
    ($prvnikus1, $druhykus1) = split(/\s+/, $radek1);
    ($prvnikus2, $druhykus2) = split(/\s+/, $radek2);
    if ($druhykus1 eq $druhykus2) {
      print "$prvnikus1 $prvnikus2\n";
    }
  }
}
16.2.2005 13:40 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: porovnani souboru
Stačí namísto jen jednoho setřídit oba soubory s -k2 a upravit -o v joinu, aby vypisoval jen 1.1 a 2.1. Nevidím rozdíl oproti prvnímu zadání ani důvod pro ,programování`.
17.2.2005 12:25 Joe
Rozbalit Rozbalit vše Re: porovnani souboru
OK, ten script funkuje bezvadne, jenom mi dalo hooodne casu opravit ty vstupni soubory (bylo v nem hoodne chyb)
jenon jedna poznamka:

kdyz porovnaval radky napr. xxx 290101 a zzz 2901010000000
do vystupu hodil pouze xxx. Jestli to porovnava jako shodu na cely retezec,
nemel by prece vypsat nic, jestli mu staci cast, mel by vypsat xxx yyy.

ja jsem ty potrebne nuly doplnil a uz bezel jak ma.
Dekuju, moc to pomohlo

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.