文本文件仅包含X,Y和Z坐标。
0.29399995009104407 0.5004167755444844 -11.279416799545288
我使用xyz=$( cat porecenter.dat )
将文本文件的内容分配给变量xyz
。所以$xyz
给了我0.29399995009104407 0.5004167755444844 -11.279416799545288
,但我需要单独使用它们。我怎样才能做到这一点?
答案 0 :(得分:4)
无需cat
while read -r x y z
do
echo "x: $x, y: $y, z: $z"
done < porecenter.dat
如果 porecenter.dat 中只有一行,则不需要while循环。以下是:
read -r x y z < porecenter.dat
答案 1 :(得分: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