Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: Jozzi - 24.07.06 - klo:00.25

Otsikko: grep + awk apuja vailla
Kirjoitti: Jozzi - 24.07.06 - klo:00.25
Terve!

Olen tässä työstänyt skriptiä joka ottaa grepillä yhdestä tidostosta halutun asian ja työntää sen eteenpäin, toisesta tiedostosta haetaan tuolla saadulla tiedostolla osumia...

Tähän saakka olen päässyt:

Koodia: [Valitse]
#!/bin/sh
cat db |grep `cat tietoja|grep $1|awk -F: -v OFS=: '{ print $1}'`

tämä toimii niin kauan kun tietoja-tiedostosta tulee vain yksi osuma joka löytyy db-tiedostosta, mutta jos tietoja tiedostossa on esim. 4 osumaa hakusanalle tuottaa se tuloksen:

Koodia: [Valitse]
#cat db |grep `cat tietoja|grep asia|awk -F: -v OFS=: '{ print $1}'`

grep: asia: Tiedostoa tai hakemistoa ei ole
grep: asia2: Tiedostoa tai hakemistoa ei ole
grep: asia3: Tiedostoa tai hakemistoa ei ole

Eli se herjaa noista 3:sta jota EI löydy, mutta se kiinnostavin, eli sitä yhtä osumaa EI näytetä lainkaan?

Kysyisin miten tuota voisi kehittää niin, että hallitsisi myös monen osuman tapauksia!

Kiitokaia jo etukäteen avuista!

Koodia: [Valitse]
Otsikko: Re: grep + awk apuja vailla
Kirjoitti: mgronber - 24.07.06 - klo:01.31
Koodia: [Valitse]
#!/bin/bash

cat tietoja | grep "$1" | awk -F: -v OFS=: '{ print $1}' | while read asia; do
    echo "asia: $asia"
    cat db | grep "$asia"
done

Jos halutaan välttää turhaa cat-komennon käyttöä niin voidaan loitsia lyhyemminkin:
Koodia: [Valitse]
#!/bin/bash

grep "$1" tietoja | awk -F: -v OFS=: '{ print $1}' | while read asia; do
    echo "asia: $asia"
    grep "$asia" db
done


Onko muuten joku syy miksi käytät tuossa awk:ta sen sijaan että sanoisit "cut -d: -f1"?
Otsikko: Re: grep + awk apuja vailla
Kirjoitti: Jozzi - 24.07.06 - klo:12.34
awk:n käytölle ei ole sen kummempaa syytä kuin että keksin että sillä saan tuon toimimaan, kiitosta vastauksesta, testaan nämä heti!