我正在处理分子坐标文件,其中第一行是原子数,后跟一个空行,每行后面是给定原子的x,y和z坐标。
7
O 0 -0.1 -1.5
H 0 0.8 -1.9
H 0 0.1 -0.5
N 0 0 1.5
H 0 -1 1.7
H -0.8 0.4 1.9
H 0.8 0.4 1.9
我想创建一个数组,其中每个元素都是文件的一行,所以它看起来像这样:
r1=(O 0 -0.1 -1.5)
r2=(H 0 0.8 -1.9)
我会使用readarray
或mapfile
命令,但我只想从第3行到第10行创建元素。有没有办法给这些命令范围?
答案 0 :(得分:0)
语法很简单,但请注意,这些行不会被拆分为数组,输出将是一维数组,其中每一行都是数组元素。
readarray -s 2 arr < file
echo ${arr[0]}
将给出
O 0 -0.1 -1.5
创建一个二维数组需要一些额外的代码,但如果你有一个顺序程序,你可以在需要时拆分每一行。
另一种方法是过滤您感兴趣的行的输入文件(例如sed -n '3,10p' file
)
答案 1 :(得分:0)
这似乎对我有用,虽然我确定它不是最有效的:
#!/bin/bash
i=0
while read line; do
i=$((i + 1))
declare -a "r$i"="($line)"
done < <(sed -n '3,10p' coords.txt)
# do stuff with $r1, $r2, etc
echo "${r1[@]}"
echo "${r2[@]}"
echo "${r3[@]}"
echo "${r4[@]}"
echo "${r5[@]}"
echo "${r6[@]}"
echo "${r7[@]}"
我们使用address range让sed
仅打印所需的行号。将其输入循环,我们使用declare
创建一个具有变量名称的数组。