![]() |
Hallo en welkom van de Verenigde Staten aan de UNIX en Linux Forum! Bedankt voor uw bezoek en Deelnemen aan onze wereldwijde gemeenschap.
|
|
google unix.com
|
|||||||
| Forums | Registreer | Forum Regels | Links | Albums | Veelgestelde vragen | Ledenlijst | Kalender | Zoeken | Today's Posts | Markeer forums als gelezen |
| Programmeren en Shell Scripting Post vragen over KSH, CSH, SH, Bash, Perl, PHP, sed, awk en andere shell scripts en shell scripting talen hier. |
Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
|
||||
| Draad | Thread Starter | Forum | Antwoorden | Last Post |
| lus probleem | paddock | Programmeren en Shell Scripting | 2 | 09-23-2008 10:15 |
| lus probleem | mdap | Programmeren en Shell Scripting | 3 | 08-16-2008 01:27 PM |
| Probleem in de lus | The Observer | Programmeren en Shell Scripting | 2 | 05-28-2008 02:43 |
| Probleem met while lus en SQL | nandajk | UNIX voor Dummies Questions & Answers | 20 | 05-04-2007 06:19 |
| probleem met de while lus | mridula | Hoog Niveau Programmering | 1 | 12-11-2005 11:44 |
![]() |
|
|
LinkBack | Thread Tools | Zoeken in deze Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Double while lus probleem
Hoi allemaal, ik heb ondervonden een vreemd probleem met de dubbele terwijl lus. Het doel van de twee, terwijl lussen is het vergelijken van 2 bestanden, tmplist.txt is de referentie-bestand met de complete lijst van servers. Zie de bijgevoegde foto voor de logica en de relatie tussen input en output.
De 2 lussen moeten zoeken, terwijl de servers in / test.csv in de / tmplist.txt, regel voor regel. Bijvoorbeeld, zoek eerste item in / test.csv Server2 in / tmplist.txt, te beginnen vanaf de eerste regel in / tmplist.txt (LINENUM \u003d 1), als die niet gevonden worden dan de output van een "NA" en ga naar de volgende regel in / tmplist.txt totdat de bijpassende Server2, en bijwerken LINENUM tegelijk. Anders zal gaan naar de volgende server SERVER3 in / tmplist.txt uit de huidige regel vanaf (omdat alle servers zijn altijd vermeld in alphabatic orde). De variabele LINENUM (indicator van de lijn nummer) gebruikt, terwijl de binnenste lus. Het is vooraf als 1, na de als voorwaarde if [$ SERVER \u003d $ refs] waar is, LINENUM zal verhogen en vervolgens breken terwijl de binnenste lus en blijven in de buitenste while lus. Echter, in de buitenste while lus, telkens wanneer zij loops en leest SERVER COUNT, de LINENUM start van de initiële waarde 1 in plaats van uit de opgehoogde LINENUM uit, terwijl de binnenste lus. Hieronder toont een deel van het programma met de gegevens van 2 terwijl loops. Kan iemand helpen om mij uitleggen wat er mis is hier? Dit is mijn eerste UNIX-opdracht, zal echt waarderen uw hulp! #! / bin / bash TYPE \u003d P2PS LINENUM \u003d 1 terwijl lees SERVER COUNT; doen cat tmplist.txt | terwijl read line; doen Refs \u003d $ (hoofd - $ LINENUM tmplist.txt | tail -1) if [$ SERVER \u003d $ refs]; vervolgens Laat LINENUM + + echo-n "," $ count>> t.csv pauze anders Laat LINENUM + + echo-n ", NA">> t.csv blijven fi gedaan Gedaan <test.csv |
|
||||
|
Er is geen noodzaak voor 2 lussen, moet u gebruik maken van krachtige Unix commando's in uw scripts, zoals grep. Dit zou moeten werken:
Natuurlijk t.csv moet leeg zijn voordat de uitvoering van het script. terwijl lees LINE doen aux \u003d $ (grep $ LINE test.csv) if [[! -z $ aux]] dan echo "$ aux">> t.csv anders echo "NA">> t.csv fi Gedaan <tmplist.txt |
|
||||
|
het lezen in de binnenste lus is een subprocess. Alle variabele waarden vastgesteld of gewijzigd in de binnenste lus niet bekend zijn buiten het. Als de bestanden zijn kleine proberen uit te wisselen de while-constructie tegen een for-lus. Zo niet, dan slaan meta-informatie in de binnenste lus in bestanden te laten buiten. Maar dit kan een vermindering van de snelheid erg veel.
Maar eigenlijk zie ik niet de noodzaak van dubbele lussen. Waarom niet grep elke lijn van tmplist.txt op de eerste foto? |
![]() |
| Bladwijzers |
| Labels |
| Unix-commando's |
| Thread Tools | Zoeken in deze Thread |
| Display Modes | Beoordeel deze draad |
|
|