• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] awk: Leerzeichen mit in Variable

Malti

Newbie
Hallo,
ich möchte eine Variable zerlegen, die wie folgt aufgebaut ist:
Code:
username::Donald Duck
Den ersten Teil kann ich auch hiermit erfolgreich in eine andere Variable speichern
Code:
user=`echo $variable | awk -F:: '{print $1}'`
Wenn ich den zweiten Teil auslesen möchte, steht dort nur Donald drin. Ist es möglich, dass der gesamte zweite Ausdruck in die zweite Variable gespeichert wird?
Vielen Dank schon mal für die Antworten!
 

regexer

Advanced Hacker
Malti schrieb:
Wenn ich den zweiten Teil auslesen möchte, steht dort nur Donald drin.
Also bei mehr geht es mit awk so:
Code:
user2=`echo $variable | awk -F:: '{print $2}'`

Aber man könnte auch der Einfachkeit halber die bash nehmen. Weiteres siehe unter man bash, und dort unter Parameter Expansion.
 
OP
M

Malti

Newbie
Klar, damit lese ich den Teil nach dem "::" aus. Mein Problem ist jetzt, dass dort dann nur "Donald" in der Variable steht. Es soll aber "Donald Duck" drin stehen.
 

rig

Newbie
Hallo zusammen,
Malti schrieb:
Klar, damit lese ich den Teil nach dem "::" aus. Mein Problem ist jetzt, dass dort dann nur "Donald" in der Variable steht. Es soll aber "Donald Duck" drin stehen.
bir mir nicht:
user@host> variable="username::donald duck"
user@host> user2=`echo $variable | awk -F:: '{print $2}'`
user@host> echo $user2
donald duck

Gruß
rig
 

revealed

Guru
wie sieht die Variable denn vollständig aus?

oder möchtest du den befehl, mit awk komplett in eine Variable setzen?

Code:
#!/bin/sh 
set -x
variable="username::donald duck";
user2="$( echo $variable | /bin/awk -F:: '{print $2}' )"
echo $user2

oder so in der Art?
Code:
#!/bin/sh 
set -x
variable="username::donald duck";
#vargrep="$( grep "[^ ]+ [^ ]+$" )";
#varawk="$( /bin/awk -F:: '{print $2}' )"
user2="$( echo $variable | /bin/awk -F \""" '{print $1}' | /bin/awk -F:: '{print $2}' )"
echo $user2

Code:
#!/bin/sh 
set -x
variable="username::donald duck";
user2="$( echo $variable | /bin/awk -F \""" '{print $1}' | /bin/awk -F:: '{print $2}' )"
if 
 [ "donald duck" = "$user2" ]; then
echo "ok";
else 
echo "nix!";
fi;
exit 0;


disk@wild-thing:~> sh Desktop/Textdatei_1
+ variable='username::donald duck'
++ echo username::donald duck
++ /bin/awk -F '"' '{print $1}'
++ /bin/awk -F:: '{print $2}'
+ user2='donald duck'
+ '[' 'donald duck' = 'donald duck' ']'
+ echo ok
ok
+ exit 0


Gruß

R
 
OP
M

Malti

Newbie
Oooooooooooooh, sorry. Da hab ich einen Fehler gemacht :oops:
Natürlich funktioniert das so
Code:
#!/bin/sh 
set -x 
variable="username::donald duck"; 
user2="$( echo $variable | /bin/awk -F:: '{print $2}' )" 
echo $user2
Mein Fehler lag schon vorher.
Ich lese die Variable aus einer Datei aus, nämlich hiermit
Code:
for variable in $(cat datei);do
...
done
und schon dort liest er das "Duck" nicht mit.
Gibt es denn eine Möglichkeit die Datei zeilenweise auszulesen und nicht, dass er nach einem Leerzeichen in einer Zeile einen neuen Datensatz anfängt?
 

regexer

Advanced Hacker
Malti schrieb:
Gibt es denn eine Möglichkeit die Datei zeilenweise auszulesen und nicht, dass er nach einem Leerzeichen in einer Zeile einen neuen Datensatz anfängt?
Code:
while read zeile
do
  echo $zeile
done </deine/datei.txt
 
Oben