为我的问题提供上下文。我正在尝试移动一个文件列表,如果分辨率大于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 匹配的下一个文件