我有一个 txt 文件,里面有 8 个“ATOMIC_POSITIONS”字符串,当我尝试用 ; 写入其中每一个时,
AtomicPos=$(grep -n "ATOMIC_POSITIONS" hw1_out_si_wire.txt)
echo $AtomicPos
它只给了我最后一个
4779:ATOMIC_POSITIONS (bohr)
4779 是行号,即最后一行。事实上,在那之后我打算取最后一行,以便我可以在最后一个“ATOMIC_POSITIONS”之后取下一行,但是,因此,它直接给了我最后一个一,所以我继续喜欢;
$NtL=262
i=1
until [ $i == $NtL ]
do
Pos=$(grep -A $i ATOMIC_POSITIONS hw1_out_si_wire.txt)
echo $Pos
i=$(expr $i + 1)
unset Pos
done
但是当我运行它时,它从第一个“ATOMIC_POSITIONS”开始并继续。
有人可以解释这是为什么吗?
答案1
为了将 grep 输出读入数组,您必须更改
AtomicPos=$(grep -n "ATOMIC_POSITIONS" hw1_out_si_wire.txt)
到
AtomicPos=( $(grep -n "ATOMIC_POSITIONS" hw1_out_si_wire.txt) )
这样,您将拥有所有匹配的模式,AtomicPos
然后循环遍历数组并打印每个元素。