Scoutnet vzw

We connect scouts!
Het is momenteel 16 Nov 2024 16:45

Alle tijden zijn UTC + 1 uur




Plaats een nieuw onderwerp Reageren op dit onderwerp  [ 4 berichten ] 
Auteur Bericht
BerichtGeplaatst: 27 Okt 2005 16:20 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 22 Jan 2004 0:00
Berichten: 773
Volgend simpel shell scriptje moet een file lezen (poempidoem.txt) en alle stukjes die tussen een lijn staan die begint met "--" in aparte bestandjes stoppen (poempidoemexploded/0.txt, poempidoemexploded/1.txt, enz)

Maar de counter schijnt niet goed te werken, telkens hij er eentje bij telt komt de counter weer op nul. Iemand een idee? (en zeg nu niet doe het met php hé :p, ik wil weten waar mijn fout zit :)

Code:
counter=0
cat poempidoem.txt | while read line
do
        echo $line >> poempidoemexploded/$counter.txt

        echo $line | if grep "^--" > /dev/null
        then
                ((counter=counter+1))

                echo $counter $line
        fi
done


Voorbeeld van file
Code:
kldqsjglskdgj
sqldkgjsdkgj
sjdgklqsdjg

--

sqdlgkjsdkgj
sldgqsdklgj
--

qsldgjqsdkljg
sldkjgksdqjg

--

qsldgjsdqlkjg
sdjqgkqjsg
--


qsdjgklsqdjg
sqdgjsdqg
--


Omhoog
 Profiel  
 
BerichtGeplaatst: 28 Okt 2005 7:59 
Offline
Site Admin
Site Admin
Gebruikers-avatar

Geregistreerd: 31 Aug 2002 23:00
Berichten: 473
Woonplaats: Tongerlo
hopla schreef:
Code:
counter=0
cat poempidoem.txt | while read line
do
        echo $line >> poempidoemexploded/$counter.txt

        echo $line | if grep "^--" > /dev/null
        then
                ((counter=counter+1))

                echo $counter $line
        fi
done



In de rapte en zonder zelf te checken denk ik dat er
Code:
counter=$counter+1
moet staan


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 28 Okt 2005 10:33 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 22 Jan 2004 0:00
Berichten: 773
Nah dan concateneerd hij ipv van op te tellen, die ((counter=counter+1)) klopt wel degelijk (zie man bash). De fout zit ergens anders denk ik ...


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 28 Okt 2005 11:06 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 22 Jan 2004 0:00
Berichten: 773
Net de fout gevonden, 't heeft te maken met variable scope (ik vermoede al zoiets):
Citaat:
E4) If I pipe the output of a command into `read variable', why doesn't
the output show up in $variable when the read command finishes?

This has to do with the parent-child relationship between Unix
processes. It affects all commands run in pipelines, not just
simple calls to `read'. For example, piping a command's output
into a `while' loop that repeatedly calls `read' will result in
the same behavior.

Each element of a pipeline runs in a separate process, a child of
the shell running the pipeline. A subprocess cannot affect its
parent's environment. When the `read' command sets the variable
to the input, that variable is set only in the subshell, not the
parent shell. When the subshell exits, the value of the variable
is lost.


En nu de oplossing:
Code:
counter=1
cat poempidoem.txt | while read line
do
        echo $line >> poempidoemexploded/$counter.txt

        if (echo $line | grep "^--" > /dev/null)
        then
                echo $counter $line
                ((counter=counter+1))
        fi
done


De code in de if wordt dus niet meer in een subshell uitgevoerd.


Omhoog
 Profiel  
 
Berichten weergeven van de afgelopen:  Sorteer op  
Plaats een nieuw onderwerp Reageren op dit onderwerp  [ 4 berichten ] 

Alle tijden zijn UTC + 1 uur


Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 25 gasten


U mag geen nieuwe onderwerpen plaatsen in dit forum
U mag geen reacties plaatsen op onderwerpen in dit forum
U mag uw berichten niet wijzigen in dit forum
U mag uw berichten niet verwijderen in dit forum
U mag geen bijlagen plaatsen in dit forum

Zoeken naar:
Ga naar:  
cron
Powered by phpBB® Forum Software © phpBB Group
Vertaald door phpBBservice.nl.