The UNIX and Linux Forums  
Hallo und herzlich Willkommen aus den Vereinigten Staaten, die UNIX-und Linux-Foren! Vielen Dank für Ihren Besuch und die Teilnahme an unserem Global Community.

Go Back   Die UNIX-und Linux-Foren > Top Foren > Shell Programmierung und Scripting
.
Google unix.com



Shell Programmierung und Scripting Post Fragen zu ksh, csh, sh, bash, Perl, PHP, sed, awk und anderen Shell-Skripte und Shell-Scripting-Sprachen hier.

Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
Faden Thread Starter Forum Antworten Last Post
Loop-Problem Paddock Shell Programmierung und Scripting 2 09-23-2008 10:15 AM
for-Schleife Problem mdap Shell Programmierung und Scripting 3 08-16-2008 01:27 PM
Problem bei for-Schleife The Observer Shell Programmierung und Scripting 2 05-28-2008 02:43 AM
Problem mit der while-Schleife und SQL nandajk UNIX for Dummies Questions & Answers 20 05-04-2007 06:19 AM
Problem mit der while-Schleife mridula High-Level-Programmierung 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 Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 11-16-2008
dawn_1030 dawn_1030 is offline
Registrierte Nutzer
  
 

Join Date: Nov 2008
Beiträge: 2
Doppel-while-Schleife Problem

Hallo, ich habe auf ein seltsames Problem mit der Doppel-while-Schleife. Das Ziel der beiden while-Schleifen ist zu vergleichen 2 Dateien, tmplist.txt ist die Referenz-Datei mit der vollständigen Liste von Servern. Bitte lesen Sie das beigefügte Bild für die Logik und das Verhältnis zwischen Input und Output.

Die 2-while-Schleifen sollte die Suche die Server in / test.csv in der / tmplist.txt, Zeile für Zeile. Zum Beispiel, Suche ersten Eintrag in / test.csv Server2 in / tmplist.txt, angefangen von der ersten Zeile in / tmplist.txt (LineNum \u003d 1), wenn nicht gefunden werden, wird Ausgang ein "NA" und gehen Sie dann zur nächsten Zeile in / tmplist.txt, bis sie die passende Server2, und zu aktualisieren LineNum gleichzeitig. Else, wird die Suche der nächsten Server server3 in / tmplist.txt aus dem aktuelle Zeile ab (da alle Server sind immer in alphabatic um).

Die Variable LineNum (Indikator für die Zeilennummer), die in der inneren while-Schleife. Es ist als 1, wenn nach dem Zustand if [$ server \u003d $ refs] wahr ist, wird LineNum Inkrement und dann brechen Sie die innere while-Schleife und in der äußeren while-Schleife. Allerdings, in der äußeren while-Schleife, jedes Mal, wenn er Loops und liest SERVER COUNT, die LineNum beginnt mit dem ersten Wert 1 wieder statt von der erhöhten LineNum aus der inneren while-Schleife.


Im Folgenden zeigt einen Teil des Programms mit den Einzelheiten von 2 while-Schleifen.
Kann jemand helfen, zu erklären mir, was ist hier falsch? Dies ist meine erste UNIX-Zuordnung, wirklich danken Ihnen für Ihre Unterstützung!


#! / bin / bash
TYPE \u003d P2PS
LineNum \u003d 1

while read Server Count; tun

Katze tmplist.txt | while read LINE; tun

Refs \u003d $ (Kopf - $ LineNum tmplist.txt | tail -1)

if [$ server \u003d $ refs], dann
Lassen Sie LineNum + +
echo-n "," $ COUNT>> t.csv
Pause
sonst
Lassen Sie LineNum + +
echo-n "NA">> t.csv
weiter
fi
getan

done <test.csv
Angehängte Bilder
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
Location: Ashburn, Virginia
Posts: 9111
Die innere Schleife ist ein Sub-Prozess. Alles, was geändert hat keinen Einfluss auf die Eltern-Prozess. Es ist die gleiche Situation wie

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

Beide Ihre Loops sind Lesen von stdin. Jeder Prozess hat nur 1 stdin, damit Ihre zwei Schleifen absolut müssen separate Prozesse.
  #3 (permalink)  
Old 11-16-2008
creepy Krüppel creepy cripple is offline
Registrierte Nutzer
  
 

Join Date: Oct 2008
Beiträge: 2
Es besteht keine Notwendigkeit für 2 Loops, müssen Sie leistungsfähige UNIX-Befehle in Ihren Skripten, wie grep. Diese sollten:
Natürlich, t.csv müssen leer sein, bevor das Skript.

while read LINE
tun
aux \u003d $ (grep $ LINE test.csv)
if [[! -z $ aux]]
dann
echo "$ aux">> t.csv
sonst
echo "NA">> t.csv
fi
done <tmplist.txt
  #4 (permalink)  
Old 11-16-2008
elbrand elbrand is offline
Registrierte Nutzer
  
 

Join Date: Apr 2008
Ort: Wolfenbüttel / Deutschland
Beiträge: 12
die in der inneren Schleife ist ein subProzess. Alle Variablen gesetzt oder verändert innerhalb der inneren Schleife sind nicht bekannt, außerhalb davon. Wenn die Dateien sind kleiner versuchen, während der Austausch-Konstrukt gegen eine for-Schleife. Ist dies nicht der Fall, speichern Meta-Informationen in der inneren Schleife in Dateien, um sie außerhalb. Aber dies kann die Geschwindigkeit sehr viel.
Aber eigentlich sehe ich nicht die Notwendigkeit für Doppel-Loops. Warum nicht grep jede Zeile aus tmplist.txt auf die erste Datei?
  #5 (permalink)  
Old 11-16-2008
Franklin52 Franklin52 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2007
Posts: 4294
Eine Lösung mit 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
Registrierte Nutzer
  
 

Join Date: Nov 2008
Beiträge: 2
Vielen Dank für Ihre Antworten! Wirklich leistungsfähige Befehle!
Mein Skript funktioniert jetzt. Vielen Dank allen!
Closed Thread

Lesezeichen

Tags
Unix-Befehle

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 12:54 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0