![]() |
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| loop problem | hage | Shell-programmering och Skript | 2 | 09-23-2008 10:15 |
| För loop problem | mdap | Shell-programmering och Skript | 3 | 08-16-2008 01:27 |
| Problem i För loop | The Observer | Shell-programmering och Skript | 2 | 05-28-2008 02:43 |
| Problem med medan loop och SQL | nandajk | UNIX for Dummies Frågor & Svar | 20 | 05-04-2007 06:19 |
| Problemet med medan loop | mridula | High Level Programming | 1 | 12-11-2005 11:44 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Double medan loop problem
Hej alla, jag har stött på ett märkligt problem med dubbla medan loop. Syftet med de båda samtidigt loopar är att jämföra 2 filer, tmplist.txt är Referensfil med den kompletta listan över servrar. Se den bifogade bilden för logik och förhållandet mellan input och output.
Den 2 medan loopar ska söka servrar i / test.csv i / tmplist.txt, rad för rad. Till exempel, sök första punkten i / test.csv server2 i / tmplist.txt, från första raden i / tmplist.txt (LINENUM \u003d 1), om inte funnit sedan utgångsenergi en "NA" och sedan gå till nästa rad i / tmplist.txt tills den hittar de matchande server2, och uppdatera LINENUM samtidigt. Else kommer att fortsätta att söka nästa server server3 i / tmplist.txt från nuvarande linje och framåt (eftersom alla servrar är alltid anges i alphabatic ordning). Den rörliga LINENUM (indikator på linje nummer) som används i innerstaden medan loop. Det är fördefinierade som 1, efter det, om villkoret om [$ SERVER \u003d $ Refs] är sant, LINENUM att öka och sedan bryta ut innerstaden medan loop och fortsätta i den yttre medan loop. Men i den yttre medan loop, varje gång det loopar och lyder SERVER COUNT, det LINENUM startar från begynnelsevärde 1 gång i stället för från ökas LINENUM från innerstaden medan loop. Nedan visas en del av programmet med information om 2 medan loopar. Kan någon hjälpa till att förklara för mig vad som är fel här? Detta är min första UNIX uppdrag, verkligen kommer att uppskatta din hjälp! #! / bin / bash Type \u003d P2PS LINENUM \u003d 1 samtidigt läsa SERVER COUNT, göra katt tmplist.txt | samtidigt läsa LINE; göra Refs \u003d $ (huvud - $ LINENUM tmplist.txt | tail -1) om [$ SERVER \u003d $ Refs]; sedan Låt LINENUM + + echo-n "," $ COUNT>> t.csv bryta annan Låt LINENUM + + echo-n ", NA">> t.csv fortsätta fi gjord gjort <test.csv |
|
||||
|
Det finns inget behov av 2 slingor måste du använda kraftfulla UNIX kommandon i ditt manus, precis som grep. Detta borde fungera:
Naturligtvis t.csv måste vara tom innan den verkställer skriptet. samtidigt läsa LINE göra aux \u003d $ (grep $ LINE test.csv) om [[! -z $ aux]] sedan echo "$ aux">> t.csv annan echo "NA">> t.csv fi gjort <tmplist.txt |
|
||||
|
att läsa i den inre slingan är en subprocess. Alla variabelvärden fastställts eller ändrats i den inre slingan är inte kända utanför den. Om filerna är små försök att byta ut medan-bygga mot en for-loop. Om inte, lagra meta-information i innerstaden loop i filer för att ha dem utanför. Men detta kan minska hastigheten så mycket.
Men egentligen ser jag inte behovet av dubbla slingor. Varför inte grep varje linje från tmplist.txt den första filen? |
![]() |
| Komihåglista |
| Taggar |
| UNIX-kommandon |
| Thread Tools | Sök i denna tråd |
| Visningslägen | Betygsätt denna tråd |
|
|