The UNIX and Linux Forums  
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.

Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



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

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 Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 11-16-2008
dawn_1030 dawn_1030 is offline
Registreret Bruger
  
 

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

Join Date: Aug 2001
Beliggenhed: Ashburn, Virginia
Indlæg: 9.111
Den indvendige loop er en sub-processen. Alt ændres der ikke har nogen indvirkning på den overordnede proces. Det er den samme situation som

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

Begge dine sløjfer læser fra stdin. Hver proces kun har 1 stdin så dine to sløjfer absolut skal være separate processer.
  #3 (permalink)  
Old 11-16-2008
uhyggelig forkrøble creepy cripple is offline
Registreret Bruger
  
 

Join Date: oktober 2008
Stillinger: 2
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]]

echo "$ aux">> t.csv
anden
echo "NA">> t.csv
fi
gjort <tmplist.txt
  #4 (permalink)  
Old 11-16-2008
elbrand elbrand is offline
Registreret Bruger
  
 

Join Date: Apr 2008
Beliggenhed: Wolfenbuettel / Tyskland
Stillinger: 12
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?
  #5 (permalink)  
Old 11-16-2008
Franklin52 Franklin52 is online now Forum Staff  
Moderator
  
 

Join Date: Feb 2007
Indlæg: 4.300
En løsning med 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
Registreret Bruger
  
 

Join Date: Nov 2008
Stillinger: 2
Mange tak for dit svar! Virkelig kraftfuld kommandoer!
Min script arbejder nu. Thanks all!
Closed Thread

Bogmærker

Tags
UNIX kommandoer

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 03:31 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0