Portál AbcLinuxu, 7. června 2025 08:09
1. vstup1 xxx1 yyyyyyy1 xxx2 yyyyyyy2 xxx3 yyyyyyy3 2. vstup2 zzzzzzz1 zzzzzzz2potrebuju 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......
sort -k2
) a zzzzz, tak stačí
join -1 2 -2 1 -o 1.1,1.2,2.1 vstup1 vstup2
1. vstup1 xxx1 yyyyyyy1 xxx2 yyyyyyy2 xxx3 yyyyyyy3 2. vstup2 zzz1 ooooooo1 zzz2 ooooooo2 vstup1 - asi 13000 radku vstup2 - asi 1000 radkuPotrebuju 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)
#!/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"; } } }
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
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.