Pitäisi saada skripti aikaiseksi joka vertaa tiedostoja A ja B ja tuottaa tiedoston C jossa on vain sekä A:sta että B:stä löytyvät rivit. Comm ja diff eivät toimi kun ei sovi sortteerata... eli näin:
Luetaan A:sta rivi
Tarkistetaan löytyykö rivi B:stä
Jos löytyy syötetään rivi sellaisenaan C:hen
Jos ei, luetaan seuraava rivi
Joku while - do - if -hässäkkähän tuo vissiin on, mutta menee tupelolta peukalo suuhun...
Luetaan A:sta rivi
Tarkistetaan löytyykö rivi B:stä
Jos löytyy syötetään rivi sellaisenaan C:hen
Jos ei, luetaan seuraava rivi
Joku while - do - if -hässäkkähän tuo vissiin on, mutta menee tupelolta peukalo suuhun...
Vastaukset 9
Vanhimmat
Luepa bashin ohjesivulta, miten tehdään associative array. Lukaiset ekan fileen läpi rivi riviltä, lisäät jokaisen rivin tuohon taulukkoon ja kun luet toista filettä, tsekkaat, löytyykö rivi jo taulukosta.
Pikkusen voi olla hidasta, jos kyse on isommista fileistä. Vähän lisää potkua saa koodaamalla tuo vastaava systeemi vaikka Pythonilla.
... jos löytyy, >> kolmanteen fiiluun, n'inkö?
grep -Fxf lista1.txt lista2.txt
tekeekö tämä sen mitä haluat?
niin ja tiedostoon se menee luonnollisesti näin:
grep -Fxf lista1.txt lista2.txt >yhtäläisyydet.txt
Kiitos, mutta ei tehny kun just painvastoin... ne yhtenevat rivit pitais saada esille...
... jos joku tuota versiota tarvitsee niin kannattaa laittaa >> yhtalaisyydet.txt ni tulee usiampi kun yks rivi :-)26
öö, tuo grep -Fxf listaa juurikin yhtenevät rivit.
tee vaikka tiedosto
lista1:
matti meikäläinen
pentti nelonen
jorma kääriäinen
mirva
heikki
sanna
lista2:
sanna
pentti nelonen
steven
mirva
kalevi
helena
ja sitten vertaat niitä:
grep -Fxf lista1 lista2
saat:
---
sanna
pentti nelonen
mirva
---
eli yhtenevät rivit. etkö halunnutkaan yhteneviä rivejä vaan jotain muuta?
tuolla >> voi jatkaa olemassaolevan tiedoston kirjoitusta
> kirjoittaa uuden tiedoston eikä jatka vanhan perään.
esimerkissä ei ole väliä kumpaa käyttää, paitsi jos ajaa vertailun uudelleen. silloin >> ei käy koska se tekisi tulokseen vain dublikaatteja.
niin ja jos nyt oikeasti olisi tarkoitus saada käänteinen tulos, niin se onnistuu ristiin greppaamalla ainakin:
grep -Fxvf lista1 lista2 >yksittäiset.txt&& grep -Fxvf lista2 lista1 >>yksittäiset.txt
tämä siis listaa rivit, jotka on VAIN jommassa kummassa tiedostossa.
... ja näköjään hidasälyinenkin vielä :-D
Kiittää hän!