2016-04-15 3 views
0

テキストファイルには、X、Y、Z座標のみが含まれています。テキストファイルの行をbashでさまざまな変数として取得する方法は?

0.29399995009104407 0.5004167755444844 -11.279416799545288 

私は変数xyzにテキストファイルの内容を割り当てるためにxyz=$(cat porecenter.dat)を使用。だから$xyz私に0.29399995009104407 0.5004167755444844 -11.279416799545288を与えるが、私はそれらを別々に必要とする。どうやってやるの?

答えて

4

cat

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

の必要はありません。あなたが唯一porecenter.dat内の1行を持っている場合は、whileループのための必要はありません。以下が行います。

read -r x y z < porecenter.dat 
0

bashで最も簡単な方法は、配列を使用することです:

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

ノート括弧の追加...

デフォルトIFS(内部フィールドセパレータ)に依存しています単語を別々の配列要素に分割して、x,yおよびzを与えます。

、XにYをファイル全体を読み取るために、Zアレイ

あなたは短いスクリプトでこれを行うことができます。

#!/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 

例入力

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

出力例

$ 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

それは私に与えX 0.29399995009104407 [0]、Y 0.29399995009104407 [1] Z 0.29399995009104407 [2]最後に[0]を取り払うの方法はありますか? – wthimdh

+0

確かに、それは省略された '{...}'中括弧(私の悪い) ':)'あなたに完全な例を教えてください。 –

関連する問題