>我有以下数组
components=('xx' 'xy' 'xz' 'yx''yy''yz''zx''zy''zz')
我正在为所有组件执行以下循环
for i in "${components[@]}"
do
if [ ${i: -1} == "x" ]; then
awk '$1 == "*" && $2 == ${i: -1} {v=$3} END {print v}' ${i}_E_cutoff_$((100*$a))_eV/$systemID.castep >> Stress_${i}_vs_Ecutoff_convergence.txt
elif [ ${i: -1} == "y" ]; then
awk '$1 == "*" && $2 == ${i: -1} {v=$4} END {print v}' ${i}_E_cutoff_$((100*$a))_eV/$systemID.castep >> Stress_${i}_vs_Ecutoff_convergence.txt
elif [ ${i: -1} == "z" ]; then
awk '$1 == "*" && $2 == ${i: -1} {v=$5} END {print v}' ${i}_E_cutoff_$((100*$a))_eV/$systemID.castep >> Stress_${i}_vs_Ecutoff_convergence.txt
fi
done
为什么awk告诉我我有一个语法错误
$2 == ${i: -1}
您收到该语法错误的原因是您无法单独使用awk命令中的外部变量。你首先需要告诉awk关于他们的信息。
这里有一篇关于如何做到这一点的非常好的帖子:如何在 awk 脚本中使用 shell 变量?
使用上面的答案,您可以执行以下操作:
awk -v var=${i: -1} '$1 == "*" && $2 == var {v=$3} {print v}' ${i}_E_cutoff_$((100*$a)) _eV/$systemID.castep >> Stress_${i}_vs_Ecutoff_convergence.txt
-v var=${i: -1}
在哪里注册变量以供 awk 使用。
希望这有帮助!