如何在 awk 命令替换中使用 bash 变量来分配另一个变量

exs*_*c01 1 bash awk

我有 10 个文件名为

data_00
data_01
data_02
...
data_09
Run Code Online (Sandbox Code Playgroud)

数据文件的前 8 行如下所示:

Stamp_number
10
Item_number
9000
Position
5.1008068168967009e+00 5.4899193183110690e+01
5.1008068168967009e+00 5.4899193183110690e+01
5.1008068168967009e+00 5.4899193183110690e+01
Run Code Online (Sandbox Code Playgroud)

所有 10 个文件都具有相同的格式,但所有数字的值不同。

我希望使用 awk 为 10 个文件的第一列和第二列的第 6、7 和 8 行的值分配一个 bash 变量,并获得它们之间的差异。

for i in {00..09}; do
a=$(awk 'NR==6 {print $1}' data_$i)
b=$(awk 'NR==6 {print $2}' data_$i)
c=$(awk 'NR==7 {print $1}' data_$i)
d=$(awk 'NR==7 {print $2}' data_$i)
e=$(awk 'NR==8 {print $1}' data_$i)
f=$(awk 'NR==8 {print $2}' data_$i) 
val_ab=`bc -l <<< "$a-$b"`
val_cd=`bc -l <<< "$c-$d"`
val_ef=`bc -l <<< "$e-$f"`
echo $val_ab
echo $val_cd
echo $val_ef
done
Run Code Online (Sandbox Code Playgroud)

但这会打印出以下语法错误 10 次:

(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
0.000000
0.000000
0.000000
Run Code Online (Sandbox Code Playgroud)

我试过 data_"$i", data_[$i], data_${i} 但都失败了。如何在 awk 命令替换中使用 for 循环索引 i(或任何其他 bash 变量)来分配 bash 变量?

Die*_*ano 5

bc不支持科学记数法,但awk

awk 'NR>=6 && NR<=8 {print $1-$2}' "data_$i"
Run Code Online (Sandbox Code Playgroud)