2016-04-15 10 views

Antwort

4

Keine Notwendigkeit für cat

while read -r x y z 
do 
    echo "x: $x, y: $y, z: $z" 
done < porecenter.dat 

Wenn Sie nur eine einzige Zeile in porecenter.dat haben, gibt es keine Notwendigkeit für eine while-Schleife. Im Folgenden wird tun:

read -r x y z < porecenter.dat 
0

Die einfachste Art und Weise in der Bash ist einen Array zu verwenden:

declare -a arrayxyz 
arrayxyz=($xyz) 
printf "x %s y %s z %s\n" "${arrayxyz[0]}" "${arrayxyz[1]}" "${arrayxyz[2]}" 

(Note die Zugabe von Klammern ...)

die auf dem Standard IFS (interne Feldtrenn) verlassen wird Um die Wörter in separate Array-Elemente zu teilen, geben Sie x, y und z.

Um eine gesamte Datei in X, Y, Z-Arrays

Sie können dies mit einem kurzen Skript zu lesen:

#!/bin/bash 

fname="${1:-/dev/stdin}" 

declare -a arrx ## declare x, y, z arrays 
declare -a arry 
declare -a arrz 

while read -r x y z; do  ## read file into x, y, z arrays 
    arrx+=($x) 
    arry+=($y) 
    arrz+=($z) 
done <"$fname" 

## output x, y, z values read 
for ((i = 0; i < ${#arrx[@]}; i++)); do 
    printf "array[%d] x: %-20s y: %-20s z: %-20s\n" \ 
     "$i" "${arrx[i]}" "${arry[i]}" "${arrz[i]}" 
done 

Beispiel Eingabe

$ cat dat/xyz.txt 
0.29399995009104407 0.5004167755444844 -11.279416799545288 
0.29399995009104407 0.5004167755444844 -11.279416799545288 
0.29399995009104407 0.5004167755444844 -11.279416799545288 

Beispiel Ausgang

$ bash readxyz.sh dat/xyz.txt 
array[0] x: 0.29399995009104407 y: 0.5004167755444844 z: -11.279416799545288 
array[1] x: 0.29399995009104407 y: 0.5004167755444844 z: -11.279416799545288 
array[2] x: 0.29399995009104407 y: 0.5004167755444844 z: -11.279416799545288 
+0

Es gibt mir x ,29399995009104407 [0] y ,29399995009104407 [1] z 0,29399995009104407 [2] Gibt es eine Möglichkeit loszuwerden [0] am Ende? – wthimdh

+0

sicher, das war zu tun ausgelassen '{...}' geschweiften Klammern (mein schlechtes) ':)' Lassen Sie mich Ihnen ein komplettes Beispiel geben. –

Verwandte Themen