平均Shell脚本给出的错误

平均Shell脚本给出的错误,shell,Shell,我有一个shell脚本,它应该取几个数据文件的平均值并创建一个新文件。以下是脚本的副本: #! /bin/bash cat *thist > tmp.dat > aves.txt nx=10 ss=5 for i in $(seq 1 $nx) do a=$i*2-1 export dummy=$(awk 'NR=='$a' {print $1}' tmp.dat) awk '$1=='$dummy' {print $5}' tmp.dat > $d

我有一个shell脚本,它应该取几个数据文件的平均值并创建一个新文件。以下是脚本的副本:

#! /bin/bash

cat *thist > tmp.dat
> aves.txt
nx=10
ss=5

for i in $(seq 1 $nx)
do
    a=$i*2-1
    export dummy=$(awk 'NR=='$a' {print $1}' tmp.dat)
    awk '$1=='$dummy' {print $5}' tmp.dat > $dummy.dat
    export ave=$(awk 'NR>='$ss' {sum+=$1 b++} END {print sum/b}' $dummy.dat)
    echo $dummy $ave >> aves.txt
done

rm *.dat
读入100个.thist文件后,输出文件如下所示:

0 545.608
4e-07 290.349
8e-07 613.883
1.2e-06 295.655
1.6e-06 310.78
2e-06 305.01
2.4e-06 300.733
2.8e-06 308.319
3.2e-06 298.728
3.6e-06 311.961

我在第1行和第3行得到一个错误,因为第二列中的数字应该在250到350之间。我不知道我做错了什么。我检查了所有单独的数据文件,所有第二列的数字都在250到350之间。我还运行了这个脚本,只读取了10个文件,它似乎工作得很好。如果这是一个愚蠢的问题或者令人困惑,我很抱歉,我对shell脚本非常陌生。提前感谢您的帮助。

Sam,您没有发布实际错误,但您的行-
1
错误似乎是由于
之间的
空格造成的
/bin/bash
(将其删除)。然后,要启用调试输出,请将
设置-x
为第2行(或使用
bash-x scriptname
运行脚本,这将执行相同的操作。)发布发生的行和实际错误

行-
3
错误可能是由于没有与文件glob
*thist
匹配的文件。如果文件名中的
thist
后面有其他字符,则需要
*thist*
(或者
*thist.txt
,如果它们都有
.txt
扩展名)

下一行更正确地写为
:>aves.txt
(在0处截断文件)


最后,你的算术应该是
a=$((i*2-1))
或者不推荐,但是你可以使用旧的
expr
语法
a=$(expr$i\*2-1)
注意:你必须用
\*
转义
*

为什么不
a=$((i*2-1))
,你也可以使用
a=$(expr$i\$2-1)
。第1行的错误来自
之间的
空格
/bin/bash
。(去掉它)第3行错误是由于文件名前面的通配符
*
造成的(很可能与任何内容都不匹配)。如果文件名为
???thist.txt
,则需要使用
*thist.txt
,或者如果扩展名不同,则需要使用
*thist*
。将第
1行
添加
后,将-x设置为第2行,以便调试输出。发布实际错误。感谢您的帮助!我想我没有把我的问题说清楚。我看到的“错误”在创建的aves.txt文件中。aves.txt文件第1行和第2列的数字显示为545.608和613.883,但其他文本文件中没有超过350的数字。这个脚本是对*thist文件的平均值,所以我应该看到像613这样的数字。有什么想法吗?好吧,我还是有点茫然。正在创建
aves.txt
文件。在350以上的任何其他文件中都没有数字,但在对这些数字求平均值时,您在
aves.txt
中得到了
545.608
613.883
,但您应该看到
613
周围的数字?你可以发布3个thist文件,每个文件10行,这样我们就有了实际的内容。这将有助于填补空白。