我正在尝试在bash中执行一些浮点运算,并且在终端中出现这些错误:
$
(standard_in) 2: parse error
(standard_in) 2: parse error
(standard_in) 1: parse error
引发这些错误的代码是:
qlen=$(awk '{print $2 ; exit}' $filepath/result)
slen=$(awk '{print $3 ; exit}' $filepath/result)
len=$(awk 'BEGIN{max = 0} {if (($4) > max) max = ($4)} END {print max}' $filepath/result)
qcov=$(echo $len / $qlen | bc -l) #parse error 2
scov=$(echo $len / $slen | bc -l) #parse error 2
if (( $(echo "$qcov >= .7" | bc -l) )) && (( $(echo "$scov >= .7" | bc -l) )) #parse error 1???
then
score=$(awk '{ total += $1; count++ } END { if (count > 0) {printf "%f", total/count} }' $filepath/result) #parse error 1???
else
score=0
fi
我在$4
列中找到最大数,然后将其除以$2
和$3
列中的数字。我想要浮点结果,而不是整数算术。我将此浮点数保存到qcov
和scov
中,并在if语句中使用条件运算符。我认为我已经缩小了发生这些解析错误的确切行,上面已对此进行了评论。它们全部来自bc
命令。
输入文件$filepath/result
如下所示:
34.234 234 756 34 3 34
76.542 234 756 7 64 76
63.357 234 756 97 5 35
您可以将此文件视为空格分隔的表。列$2
和$3
始终是相同的数字,因此,分配qlen
和slen
的awk语句应与exit
语句一样工作。>
我的最佳猜测是,如果if语句评估为true时会出现一些问题,但是我不十分了解发生了什么问题。
谢谢。
编辑:
感谢所有提供帮助的人,我弄清楚了为什么会出现这些错误。每次我调用此代码集时都会创建文件result
。在某些情况下,创建它的程序不会打印任何内容,从而导致EOF(?)开头并导致我得到解析错误。我]非常确定这就是为什么我会解析错误。
答案 0 :(得分:2)
不确定拥有awk
的全部功能时为什么要进行如此多的shell操作。
找到第4列的最大值,然后除以第2列和第3列。
$ awk 'NR==FNR{if(max<$4) max=$4; next} {print max/$2, max/$3}' file{,}
0.41453 0.128307
0.41453 0.128307
0.41453 0.128307
我不知道接下来要做什么,但是您也应该能够轻松地添加到该脚本中。
答案 1 :(得分:0)
@Justin:您的文件result
有几行。因此,qlen
和slen
是一个嵌入了多个数字的字符串。使用-x
运行脚本时,您可以立即看到此问题。