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
Asterisk auf IPCop Asterisk 1.4.20 für IPCop 1.4.18 (Default branch) iBot Software-Releases - RSS News 0 05-21-2008 09:40 PM
Asterisk auf IPCop Asterisk 1.4.19.2 für IPCop 1.4.18 (Default branch) iBot Software-Releases - RSS News 0 05-14-2008 08:20 AM
Asterisk auf IPCop IPCop 1.4.18 mit Asterisk 1.4.19.1 (Asterisk IPCop ISO Zweigstelle) iBot Software-Releases - RSS News 0 04-26-2008 05:10 AM
Asterisk auf IPCop Asterisk 1.4.19.1 für IPCop 1.4.18 (Default branch) iBot Software-Releases - RSS News 0 04-25-2008 05:10 PM
Weitergabe Stern zu einem Skript als Variable GKnight Shell Programmierung und Scripting 9 04-02-2008 11:32 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 06-05-2008
bradtri2 bradtri2 is offline
Registrierte Nutzer
  
 

Join Date: Jun 2008
Beiträge: 4
Wie zu ignorieren * (Stern) in einer Variable

Ich benutze ein Shell-Skript zu lesen, SQL-Anweisungen in einer DB2-Tabelle und schreibt diesen in eine Datei. Das Problem ist, dass ich einige SQL-Anweisungen haben ein "*" enthalten, die sich da die Liste der Dateien im aktuellen Verzeichnis, wenn ich das Skript ausführen. Wie kann ich verhindern, dass die "*" nicht gelöst?

Aktuelle SQL: SELECT * FROM RTDS.TSPSTOPS

Ergebnis SQL: SELECT gen.out gen.sql gen2.sql getsql.sh getsql2.sh sqlrow.out sqltxt.out test.sh AUS RTDS.TSPSTOPS

Code-Snippet:

sqlrow \u003d $ (db2 + c-x fetch von C1)
fetchrc \u003d $?
echo fetchrc \u003d $ rc

echo $ (sqlrow)
  #2 (permalink)  
Old 06-05-2008
fabtagon fabtagon is offline
Registrierte Nutzer
  
 

Join Date: Apr 2008
Ort: Europäische Union / Deutschland
Beiträge: 189
Zitat:
sqlrow \u003d $ (db2 + c-x fetch von C1)
Nr. Variable hier \u003d> keine Erweiterung stattfinden wird. Vielleicht Ihr Beispiel ist zu kurz? Haben Sie in der Realität so etwas wie "x \u003d $ ($ var db2 holen aus c1)"? In diesem Fall Surround $ var mit Anführungszeichen.
  #3 (permalink)  
Old 06-05-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
modérateur
  
 

Join Date: Dezember 2007
Ort: Haus der 17-Weltmeister Boston Celtics
Beiträge: 1311
Wink Vielleicht aus, was Sie versuchen zu tun, aber ...

Code:
> line1="ls *"
> echo $line1
ls 50964hdr.txt bin cbin dead.letter greetings junk.tmp masters orictl sample tmp
Dies scheint zu sein, was Sie auf

Code:
> echo "$line1"
ls *
2. diesem Beispiel ist es, was ich denke, Sie werden versuchen,
  #4 (permalink)  
Old 06-05-2008
bradtri2 bradtri2 is offline
Registrierte Nutzer
  
 

Join Date: Jun 2008
Beiträge: 4
Ich entschuldige mich für mein Beispiel nicht ganz klar. Die "Aktuelle SQL", die in meinem OP ist der Wert, den die holen wieder in die Shell-Variable "sqlrow". Da die tatsächlichen SQL verfügt über einen "*" in ihm, wenn ich echo $ sqlrow, die mit * wird gelöst und ersetzt in der Liste der Dateien aus dem aktuellen Verzeichnis.

So, duh, ich war in der Lage zu lösen dass man durch die Anbringung von doppelten Anführungszeichen um die Variable auf das Echo, wie: echo "$ sqlrow"

Nun, die Handlung ein bisschen dicker. Die SQL wird in einem varchar (32000) auf dem Quell-Tabelle. Wenn ich die Anführungszeichen auf das Echo, Ich bekomme jetzt einen Datensatz echo'd hin, dass es 32000 Byte lang. (Die eigentliche SQL-Anweisungen wird von 50 - 10000 bytes). Also, ich nicht schreiben wollen alle, dass zusätzlicher Speicherplatz auf das Ende eines jeden Datensatzes.

Ich kann die Länge der SQL, und ich bin jetzt versuchen, substr in awk wie folgt wobei $ rowlen enthält die Länge der SQL:

sqltxt \u003d `echo" $ sqlrow "| awk '(print substr ($ 0,1, $ rl))" \u003d $ rl rowlen "

Aber ich bin jetzt immer die Meldung "awk: Datensatz" SELECT * F. .. " zu lang "

Was ist der beste Weg für mich zu unterdrücken, die entweder zusätzliche Leerzeichen am Ende eines jeden Datensatzes oder substr die tatsächlichen SQL?
  #5 (permalink)  
Old 06-05-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
modérateur
  
 

Join Date: Dezember 2007
Ort: Haus der 17-Weltmeister Boston Celtics
Beiträge: 1311
Wink tr-Befehl

tr-s ""
wird extra unterdrücken "" Raum charcters

Code:
> line2="This  2spaces   3spaces    4and5after     *"
> echo "$line2"
This  2spaces   3spaces    4and5after     *
> echo "$line2" | tr -s " "
This 2spaces 3spaces 4and5after *
  #6 (permalink)  
Old 06-06-2008
bradtri2 bradtri2 is offline
Registrierte Nutzer
  
 

Join Date: Jun 2008
Beiträge: 4
Vielen Dank!

joeyg,
Vielen Dank für den Tipp zu dem "tr" Kommando. Er tut, was ich brauche, es zu tun.

nur als Information, ich war auch in der Lage, um Chaos und den "Cut"-Befehl zu arbeiten, da hatte ich die Erklärung der Länge zur Verfügung steht, aber ich denke, ich bleibe mit "tr"

Danke,
bp
  #7 (permalink)  
Old 06-05-2008
shew01 shew01 is offline
Registrierte Nutzer
  
 

Join Date: Dezember 2007
Beiträge: 41
Zitat:
Die SQL wird in einem varchar (32000) auf dem Quell-Tabelle. Wenn ich die Anführungszeichen auf das Echo, Ich bekomme jetzt einen Datensatz echo'd hin, dass es 32000 Byte lang.
Wenn die Spalte ist definiert als varchar (32000), ich verstehe nicht, warum Sie Abrufen, was zu sein scheint voller Breite Spalten. Ich bin mit Oracle anstelle von DB2, aber das Prinzip ist das gleiche.

Code:
create table my_table
	(sql_statement varchar(1000));

insert into my_table values ('select * from table2');

select sql_statement || '#' from my_table;
Hier ist meine Ausgabe:

Code:
SQL_STATEMENT||'#'
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
select * from table2#

1 row selected.
Haben Sie versucht Trimmen der Ausgabe als Sie es von der DB2-Datenbank?

Code:
select trim(sql_statement) || '#' from my_table;
Die Ausgabe ist die gleiche (dh, keine Leerzeichen für die Daten), es sei denn, die lange Reihe von Strichen ist, Ihnen ein Problem:

Code:
TRIM(SQL_STATEMENT)||'#'
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
select * from table2#

1 row selected.
Closed Thread

Lesezeichen

Tags
awk, awk trim, trim, trim awk

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 01:00 PM.


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