The UNIX and Linux Forums  
Hallo en welkom van de Verenigde Staten aan de UNIX en Linux Forum! Bedankt voor uw bezoek en Deelnemen aan onze wereldwijde gemeenschap.

Go Back   De Unix-en Linux Forum > Top Forums > Programmeren en Shell Scripting
.
google unix.com



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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 11-16-2008
dawn_1030 dawn_1030 is offline
Geregistreerde gebruiker
  
 

Join Date: november 2008
Posten: 2
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
Bijgevoegde afbeeldingen
File Type: bmp untitled.bmp (177,0 KB, 13 views)
  #2 (permalink)  
Old 11-16-2008
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Locatie: Ashburn, Virginia
Berichten: 9.111
De binnenste lus wordt een sub-proces. Iets veranderd is er geen effect op de bovenliggende proces. Het is dezelfde situatie als

X \u003d 1
bash-c "X \u003d 2"
echo $ X

Zowel van uw loops zijn lezing van stdin. Elk proces heeft slechts 1 stdin, zodat je twee lussen absoluut moeten worden gescheiden processen.
  #3 (permalink)  
Old 11-16-2008
griezelig verlamde creepy cripple is offline
Geregistreerde gebruiker
  
 

Join Datum: oktober 2008
Posten: 2
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
  #4 (permalink)  
Old 11-16-2008
elbrand elbrand is offline
Geregistreerde gebruiker
  
 

Join Date: april 2008
Locatie: Wolfenbuettel / Duitsland
Posts: 12
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?
  #5 (permalink)  
Old 11-16-2008
Franklin52 Franklin52 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2007
Berichten: 4.301
Een oplossing met AWK:
Code:
awk '
NR==FNR{a[$1]=$2;next}
$0 in a{print $0,a[$0];next}
{print "NA"}
' test.csv tmplist.txt > t.csv
  #6 (permalink)  
Old 11-17-2008
dawn_1030 dawn_1030 is offline
Geregistreerde gebruiker
  
 

Join Date: november 2008
Posten: 2
Hartelijk bedankt voor uw antwoorden! Echt krachtige bevelen!
Mijn script werkt nu. Bedankt allemaal!
Closed Thread

Bladwijzers

Labels
Unix-commando's

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 11:29.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De Unix-en Linux Forums Copyright © 1993-2009. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0