【发布时间】:2019-07-12 16:50:05
【问题描述】:
我有以下数组
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}
【问题讨论】:
-
我想你想要在“元素”
yy''yz''zx''zy''zz'之间有空格。 -
我试图修改你的逻辑(有一个没有
if-elif-elif-fi的awk命令),但我看不出你真正想要什么。我认为$((100*$a))与您的问题无关。您使用$1 == "*",这是输入文件中一行的第一个字段还是您使用变量调用循环?似乎您希望对组件xy使用此功能:在xy_输入文件中查找以* xy开头的最后一行(*不是通配符)并将该行的第四个字段附加到您的输出中。这是你想要的吗? -
添加示例输入和所需输出将使您的问题更容易理解。在编辑问题时,您可能希望将输入和输出文件更改为
${i}.in和${i}.out。
标签: arrays string bash indexing