The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



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

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øk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 11-16-2008
dawn_1030 dawn_1030 is offline
Registrert bruker
  
 

Bli Dato: november 2008
Innlegg: 2
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
Vedlagt bilde
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
  
 

Bli Dato: Aug 2001
Beliggenhet: Ashburn, Virginia
Innlegg: 9131
Indre sløyfe er en sub-prosess. Noe endret det har ingen effekt på den overordnede prosessen. Det er samme situasjon som

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

Både av looper leser fra stdin. Hver prosess har bare 1 stdin så to sløyfer absolutt må separate prosesser.
  #3 (permalink)  
Old 11-16-2008
skumle krøpling creepy cripple is offline
Registrert bruker
  
 

Bli Dato: Oct 2008
Innlegg: 2
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]]

echo "$ aux">> t.csv
ellers
echo "NA">> t.csv
fi
Ferdig <tmplist.txt
  #4 (permalink)  
Old 11-16-2008
elbrand elbrand is offline
Registrert bruker
  
 

Bli Dato: april 2008
Beliggenhet: Wolfenbuettel / Tyskland
Innlegg: 12
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?
  #5 (permalink)  
Old 11-16-2008
Franklin52 Franklin52 is offline Forum Staff  
Moderator
  
 

Bli Date: Feb 2007
Innlegg: 4342
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
Registrert bruker
  
 

Bli Dato: november 2008
Innlegg: 2
Tusen takk for svar! Virkelig kraftige kommandoer!
Min Skriptet fungerer nå. Takk alle!
Closed Thread

Hugseliste

Tags
UNIX kommandoer

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 05:57.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0