awk Probleme bzw. datenbank herauslesen

B

buuuurn

Jungspund
Folgende Aufgabenstellung:

Ich würde gerne aus einer Datenbank etwas heraus lesen und zwar:

..
db2 list tablespaces show detail | grep Type > hugo.txt

LISTE=$( cat hugo.txt | awk -F= '{print $2}')
for ITEM in $LISTE
do
arr[zahl]=${ITEM}
print ${ITEM}
let 'zahl=zahl+1'
done


und hugo sieht so aus:

Type = System managed space
Type = System managed space
Type = System managed space
Type = Database managed space
Type = Database managed space
Type = Database managed space

nur die ausgabe die rauskommt ist:

System
managed
space
...

also er nimmt ab dem = jedes wort für ein eigenes Element d.H

a[0]= System
a[1]=managed
..
ich würde gerne haben
a[0]=System managed space

das wäre das erste problem

und als draufgabe:

wenn jemand eine idee hätte wie ich aus der daten bank nur das bekomme bei dem database mananged steht wäre ich dankbar.

meine idee ist es , alles in ein Array dnan zu lesen aus der datei und dann halt auszusortieren wo es vorkommt und wo nicht

MFG
buuuurn
 
so gehts nicht? Also die Argumente in in Doppelhochkomme oder auch mal einfache Hochkomma probieren LIST='abc def' ....
Code:
LISTE="$( cat hugo.txt | awk -F= '{print $2}')"
for ITEM in $LISTE
do
     arr[zahl]=${ITEM}
     print ${ITEM}
     let 'zahl=zahl+1'
done
 
Hallo

Deine for ITEM -Schleife zerlegt die Eingabe in einzelne Variablen am FS getrennt.
Entweder du manipulierts FS oder verwendest gleich read.
Bei read wird alles bis zum Zeilenende in die definierten Variablen gepackt.
Hast du nur eine, landet es komplett darin.
Code:
cat $LIST |while read ITEM;
do 
arr[zahl]="${ITEM}"
print "${ITEM}"
let 'zahl=zahl+1'
done
Oder eben FS=$'\n'

Code:
IFS=$'\n';for I in $(cat test|awk -F= '{print $2}'); do echo "$I"; done

*read unter ksh kenne ich nicht wirklich, und ich habe auch keine Lust mir extra ksh zu installieren. ;)

Also gegebenenfalls mal nachsehen ob dein read das auch so behandelt.
Zu deiner zweiten Frage:
Erstell dafür einen extra Thread im Forum SQL und Datenbanken , das hat wohl weniger mit der shell als mit SQL zu tun.
Welchen DB-Server nutzt du denn?
Gib das dort bitte mit an.

Gruß Wolfgang
 
Zuletzt bearbeitet:
das mit dem IFS funzt auch ned

da speichert er mir

System ma
aged space

das heißt er speichert ab dem n


und so als frage am rande:

wie hängt man zeichenketten zusammen?

h="asdf"
b="asfd"
h=h+b

das wird es ja wohl ned sein
 
Zuletzt bearbeitet:
Er scheint n als das Trennsymbol zu nehmen. Ich würde in Deinem Fall = wählen, also:

Code:
[~]$ a="Type = System managed space"
[~]$ IFS='='
[~]$ set $a
[~]$ echo $2
 System managed space

Braucht noch etwas Schönheitspflege. Vielleicht habe ich Dich auch falsch verstanden.

Strings verbinden auf Shell-Ebene würde ich mit

Code:
var="$var1$var2"


Gruss, Xanti
 
Er hat recht

admin edit: Dies ist keine Werbeplattform!
 
Zuletzt bearbeitet von einem Moderator:
buuuurn schrieb:
das mit dem IFS funzt auch ned

da speichert er mir

System ma
aged space

das heißt er speichert ab dem n
Was hast du denn IFS zugewiesen?
Code:
[b]IFS=\n[/b];
for i in $(cat test|awk -F= '{print $2}'); do echo "$i"; done
 System ma
aged space
 System ma
aged space
 System ma
aged space
 Database ma
aged space
 Database ma
aged space
 Database ma
aged space
##ABER
[b]IFS=$'\n';[/b]
for i in $(cat test|awk -F= '{print $2}'); do echo "$i"; done
 System managed space
 System managed space
 System managed space
 Database managed space
 Database managed space
 Database managed space
Das sollte auch mit ksh gehen.
Da ist der Unterschied.
;)
Schau dir dringend mal die Grundlagen der Shellprogrammierung an.

Gruß Wolfgang
PS Auch hier ist es angebracht, dass du auf die von dir verwendete ksh hinweist.
In ein paar Wochen weiss das keiner mehr, da der Zusammenhang zum anderen Thread verloren geht.
 

Ähnliche Themen

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

dovecot und postfix Konfiguration Problem

NagiosGrapher 1.7.1 funktioniert nicht

Windows clients können nicht mehr auf lange laufendes System zugreifen

Zurück
Oben