![]() |
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Regler | Links | Albums | FAQ | Members List | Kalender | Søgning | Dagens Stillinger | Mark Forums Read |
| Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her. |
Mere UNIX og Linux Forum Emner du måske kan finde Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Last Post |
| loop problem | Paddock | Shell Programmering og Scripting | 2 | 09-23-2008 10:15 AM |
| for loop problem | mdap | Shell Programmering og Scripting | 3 | 08-16-2008 01:27 PM |
| Problem i For Loop | Observatørernes | Shell Programmering og Scripting | 2 | 05-28-2008 02:43 AM |
| Problem with mens loop og SQL | nandajk | UNIX for dummyer Spørgsmål & svar | 20 | 05-04-2007 06:19 AM |
| Problemet med, mens loop | mridula | Højtstående Programmering | 1 | 12-11-2005 11:44 AM |
![]() |
|
|
LinkBack | Thread Tools | Søg denne tråd | Rate Thread | Display Modes |
|
|
|
||||
|
Dobbelt mens loop problem
Hej alle, jeg er stødt på et underligt problem med det dobbelte, mens sløjfe. Formålet med de to, mens loops er at sammenligne 2 filer, tmplist.txt er referenceformatet fil med den komplette liste over servere. Se venligst vedlagte billede for logik og forholdet mellem input og output.
De 2 mens sløjfer bør søge på servere i / test.csv i / tmplist.txt, linje for linje. F.eks søgning første punkt i / test.csv server2 i / tmplist.txt, fra første linje i / tmplist.txt (LINENUM \u003d 1), hvis ikke fundet derefter output en 'NA' og derefter gå til næste linje i / tmplist.txt indtil den finder matchende server2, og opdatere LINENUM på samme tid. Else vil gå til at søge den næste server server3 i / tmplist.txt fra nuværende linje og fremover (da alle servere altid er opført i alphabatic orden). Variablen LINENUM (indikator for linje antal), der anvendes i den indvendige mens sløjfe. Det er foruddefineret som 1, efter hvis betingelsen hvis [$ SERVER \u003d $ REFS] er sandt, LINENUM vil tilvækst og derefter bryde ud den indvendige mens sløjfe og fortsætte i den ydre mens sløjfe. Men i det ydre, mens løkke, hver gang det sløjfer og læser SERVER COUNT, den LINENUM starter fra den oprindelige værdi 1 igen i stedet for fra stiger LINENUM kommer fra den indvendige mens sløjfe. Nedenfor viser en del af programmet med de nærmere enkeltheder af 2. mens sløjfer. Kan nogen hjælpe med at forklare mig, hvad der er galt her? Dette er mit første UNIX overdragelse, vil virkelig sætte pris på din hjælp! #! / bin / bash Type \u003d P2PS LINENUM \u003d 1 mens læse SERVER COUNT; gøre cat tmplist.txt | mens læse LINE; gøre REFS \u003d $ (hoved - $ LINENUM tmplist.txt | tail -1) hvis [$ SERVER \u003d $ REFS]; derefter lad LINENUM + + echo-n "," $ COUNT>> t.csv brække anden lad LINENUM + + echo-n ", NA">> t.csv fortsat fi gjort gjort <test.csv |
|
||||
|
Der er ikke behov for 2 sløjfer, skal du bruge kraftfulde UNIX-kommandoer i din scripts, som grep. Dette bør arbejde:
Naturligvis t.csv skal være tom før fuldbyrdende scriptet. mens læse LINE gøre AUX \u003d $ (grep $ LINE test.csv) hvis [[! -z $ aux]] så echo "$ aux">> t.csv anden echo "NA">> t.csv fi gjort <tmplist.txt |
|
||||
|
de læses i den inderste løkke er en subprocess. Alle variable værdier fastsat eller ændret inden for det indre sløjfe er ikke kendt uden for det. Hvis filerne er små forsøge at udveksle de samtidig-konstruere mod en for-løkke. Hvis ikke, gemme meta-informationer i den indre loop i filer for at få dem udenfor. Men det kan sænke hastigheden meget.
Men faktisk kan jeg ikke se behovet for dobbelt sløjfer. Hvorfor ikke grep hver linje fra tmplist.txt på den første fil? |
![]() |
| Bogmærker |
| Tags |
| UNIX kommandoer |
| Thread Tools | Søg denne tråd |
| Display Modes | Bedøm denne tråd |
|
|