![]() |
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Rules | Lenker | Album | FAQ | Medlemsliste | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her. |
Mer UNIX og Linux Forum Emner Du kan finne nyttig
|
||||
| Tråd | Tråd startet | Forum | Svar | Siste innlegg |
| loop problem | havnehage | Shell programmering og Skripting | 2 | 09-23-2008 11:15 |
| for loop problem | mdap | Shell programmering og Skripting | 3 | 08-16-2008 02:27 |
| Problem For Loop | The Observer | Shell programmering og Skripting | 2 | 05-28-2008 03:43 |
| Problemet med mens loop og SQL | nandajk | UNIX for Dummies Spørsmål og svar | 20 | 05-04-2007 07:19 |
| Problemet med mens loop | mridula | High Level Programmering | 1 | 12-11-2005 11:44 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
Dobbel mens loop problem
Hei alle sammen, jeg har støtt på et merkelig problem med dobbelt mens loop. Formålet med de to mens sløyfer er å sammenligne 2 filer, tmplist.txt er referansefilen med komplett liste over servere. Vennligst se vedlagt bilde for logikk og forholdet mellom inn-og utgang.
2 mens looper skal søke på servere / test.csv i / tmplist.txt, linje for linje. For eksempel, søk første elementet i / test.csv server2 in / tmplist.txt, fra første linje i / tmplist.txt (LINENUM \u003d 1), hvis ikke funnet deretter utdataene en "NA" og deretter gå til neste linje i / tmplist.txt inntil den finner samsvarende server2, og oppdatere LINENUM samtidig. Else vil fortsette å søke neste server server3 in / tmplist.txt fra gjeldende linje fremover (siden alle servere er alltid oppført i alphabatic rekkefølge). Variabelen LINENUM (indikator på linje nummer) som brukes i indre mens loop. Det er forhåndsdefinert som 1, etter at hvis tilstand hvis [$ SERVER \u003d $ REFS] er sant, LINENUM øke og deretter bryte ut indre mens loop og fortsette i den ytre, mens loop. Imidlertid, i den ytre, mens loop, hver gang den looper og leser SERVER COUNT, den LINENUM starter fra den opprinnelige verdien 1 på nytt i stedet for fra økes LINENUM kommer fra det indre, mens loop. Nedenfor viser en del av programmet med detaljer av 2 mens looper. Kan noen hjelpe til å forklare meg hva som er galt her? Dette er min første UNIX oppdrag, vil virkelig sette pris på din hjelp! #! / bin / bash TYPE \u003d P2PS LINENUM \u003d 1 mens les SERVER COUNT; gjøre cat tmplist.txt | mens les LINE; gjøre REFS \u003d $ (leder - $ LINENUM tmplist.txt | tail -1) hvis [$ SERVER \u003d $ REFS]; deretter la LINENUM + + echo-n "," $ COUNT>> t.csv pause ellers la LINENUM + + echo-n "NA">> t.csv fortsette fi ferdig Ferdig <test.csv |
|
||||
|
Det er ikke nødvendig for 2 looper, du må bruke kraftige UNIX kommandoer i skript, som grep. Denne skal fungere:
Selvfølgelig t.csv må være tom før skriptet. mens les LINE gjøre aux \u003d $ (grep $ LINE test.csv) Hvis [[! -z $ aux]] så echo "$ aux">> t.csv ellers echo "NA">> t.csv fi Ferdig <tmplist.txt |
|
||||
|
de leste i indre sløyfe er en subprocess. Alle variabelverdiene sett eller endret i indre løkke er ikke kjent utenfor den. Hvis filene er små prøver å utveksle mens-konstruere mot en for-løkke. Hvis ikke, store metasøke informations i indre sløyfe inn filer for å ha dem ute. Men dette kan redusere hastigheten mye.
Men egentlig ser jeg ikke behovet for dobbelt looper. Hvorfor ikke grep hver linje fra tmplist.txt på den første filen? |
![]() |
| Hugseliste |
| Tags |
| UNIX kommandoer |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|