Bash-skriptiin apua...

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...
982
Äänestä

Muut lukivat myös

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.

Äänestä

... jos löytyy, >> kolmanteen fiiluun, n'inkö?

Äänestä

grep -Fxf lista1.txt lista2.txt

tekeekö tämä sen mitä haluat?

Äänestä
  • niin ja tiedostoon se menee luonnollisesti näin:
    grep -Fxf lista1.txt lista2.txt >yhtäläisyydet.txt

    Äänestä

Kiitos, mutta ei tehny kun just painvastoin... ne yhtenevat rivit pitais saada esille...

Äänestä
  • ... jos joku tuota versiota tarvitsee niin kannattaa laittaa >> yhtalaisyydet.txt ni tulee usiampi kun yks rivi :-)26

    Äänestä

  • n00bi mutta... kirjoitti:

    ... 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.

    Äänestä

  • gdfsraergdfsrdgsrgfd kirjoitti:

    öö, 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.

    Äänestä

... ja näköjään hidasälyinenkin vielä :-D

Kiittää hän!

Äänestä

Kommentoi aloitusta


n00bi ihan... kirjoitti:

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...

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu