应为整型表达式;移动文件时出错



为我的问题提供上下文。我正在尝试移动一个文件列表,如果分辨率大于3.00,则移动到Above3目录。

#!/bin/bash
files=`ls *.ent`
Above3=/mnt/d/Documents/Research/PhD/PhD/Research/Results/PDB/New/XRD/Above3
for f in $files; do
resolution=`cat $f | grep "REMARK   2 RESOLUTION." | awk '{print $4}' | tr -d ' '`
if [ $resolution -gt 3.00 ] ; then
mv $f $Above3
fi
done

我得到的错误是";需要整数表达式";我不知道该怎么解决。任何关于解决方案的建议都将不胜感激。

3.00是一个浮点值。Bash无法处理浮点值,只能处理整数,因此会出现错误消息。

如果你能得到固定格式的数字(例如小数点后有两位数字(,你可以把它当作一个字符串,并按字母顺序进行比较。

但我建议您使用专门用于计算的命令bc

if [ $(bc <<< "$resolution > 3.00") == 1 ] ; then
mv $f $Above3
fi

脚本是什么(作为摘要(:

剧本是什么?

  • 它获取当前目录中与*.ent对应的所有文件

  • 它取所有包含"0"的行;备注2决议"从所有这些文件;它取这些行中的第4个字;并将结果放入bash变量$resolution

  • 如果$resolution大于3.00,它会将相应的文件(*.ent文件之一(移动到目录/mnt/d/Documents/Research/PD/PhD/Research/Results/PDB/New/XRD/AAbove3 中

  • 则它循环以继续处理名称与*.ent 匹配的下一个文件

最新更新