Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Bestand inlezen met Bash  (gelezen 2580 keer)

Offline BailHope

  • Lid
    • Techneut
Bestand inlezen met Bash
« Gepost op: 2008/07/20, 19:15:00 »
De bedoeling is dat de inhoud van een bepaald bestand "log.txt" wordt ingelezen. Daaruit moeten alle lijnen gefilterd worden die het woord "Completed" bevatten, en uit dat resultaat moet de laatste lijn gelezen worden.

Dit kan ik doen met onderstaande BASH code:
cat Folding/log.txt | grep Completed | tail -1Maar, als het programma dat dit logbestand aanmaakt niet draait, moet er een foutmelding op het scherm verschijnen. Makkelijk zat dacht ik, gewoon het resultaat in een variabele plaatsen en kijken of de variabele soms een lege string ("") bevat, maar bij het uitvoeren van onderstaande lijn krijg ik fouten:

$result = `cat Folding/FAHlog.txt | grep Completed | tail -1`Ik krijg onderstaande fout:
Citaat
./folding.sh: line 18: =: opdracht niet gevonden
Lijn 18 verwijst inderdaad naar bovenstaande code.

Kan iemand mij vooruit helpen met dit probleem aub?
Ubuntu user #12046
Mijn blog voor techneuten: http://techneut.wordpress.com
Voor de professionele IT'er: http://it-potato.blogspot.com

Offline profoX

  • Lid
    • wesley
    • Lionslink
Bestand inlezen met Bash
« Reactie #1 Gepost op: 2008/07/20, 19:40:54 »
geen $ bij het toewijzen van de variabele
en
geen spatie voor en achter de =

dus
result=`cat Folding/FAHlog.txt | grep Completed | tail -1`
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline BailHope

  • Lid
    • Techneut
Bestand inlezen met Bash
« Reactie #2 Gepost op: 2008/07/20, 19:42:21 »
Dat werkt! Fantastisch.

Vreselijk dat ik daar zo lang zelf achter heb zitten zoeken.

Bedankt, profoX!
Ubuntu user #12046
Mijn blog voor techneuten: http://techneut.wordpress.com
Voor de professionele IT'er: http://it-potato.blogspot.com

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Bestand inlezen met Bash
« Reactie #3 Gepost op: 2008/07/20, 19:44:50 »
Je kan eerst testen of dat bestand bestaat, en afhankelijk van dat resultaat bepalen wat er moet gebeuren.
Voorbeeld:
if [  -e Folding/FAHlog.txt ]
        then
                result=`cat Folding/FAHlog.txt | grep Completed | tail -1`
                #andere dingen die je wil doen
               
        else
                echo "het bestand bestaat niet!"
                exit # of iets dergelijks
fi

Offline profoX

  • Lid
    • wesley
    • Lionslink
Bestand inlezen met Bash
« Reactie #4 Gepost op: 2008/07/20, 19:57:03 »
trouwens, onderstaande is een KLEIN beetje netter, want waarom een extra commando gebruiken wanneer dat niet nodig is?

result=`grep Completed Folding/FAHlog.txt | tail -1`
of
result=`tac Xorg.0.log|grep Success -m 1`

Beide versies zijn ongeveer even snel en zijn beide toch wel 2 keer sneller (volgens het commando time) dan cat + grep + tail... maar dat verschil is natuurlijk compleet verwaarloosbaar aangezien het om milliseconden gaat :P
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline BailHope

  • Lid
    • Techneut
Bestand inlezen met Bash
« Reactie #5 Gepost op: 2008/07/20, 20:13:42 »
Het verschil is zeker niet verwaarloosbaar, want sneller is sneller wat mij betreft!
Bedankt voor de opmerking,
het was me in de man-pages van grep nooit opgevallen dat je een bestand kan meegeven, ik dacht dat je er enkel naartoe kon pipen. Bedankt! Weer iets bijgeleerd.
Ubuntu user #12046
Mijn blog voor techneuten: http://techneut.wordpress.com
Voor de professionele IT'er: http://it-potato.blogspot.com