在bash中截断的浮点数作为变量文件名
我想对所有名为“r?.txt”的文件执行for循环,其中?。???是从0.000到3.999的浮动。但是,据我所知,bash没有整数。。。这会让人头疼 我试着用两个变量来表示十进制前后的数字,来完成单调乏味的for循环。但是,如果您有?.00?,我仍然需要插入零?。因此,我需要正确处理浮点数以及如何存储/输出它们 总之,我面临两个问题在bash中截断的浮点数作为变量文件名,bash,filenames,Bash,Filenames,我想对所有名为“r?.txt”的文件执行for循环,其中?。???是从0.000到3.999的浮动。但是,据我所知,bash没有整数。。。这会让人头疼 我试着用两个变量来表示十进制前后的数字,来完成单调乏味的for循环。但是,如果您有?.00?,我仍然需要插入零?。因此,我需要正确处理浮点数以及如何存储/输出它们 总之,我面临两个问题 在bash中做float 以值形式浮动并传递到文件名的输出 谢谢。使用两个变量是个好主意 您可以使用seq-f选项保持零填充格式: #!/bin/bash dec
谢谢。使用两个变量是个好主意 您可以使用seq-f选项保持零填充格式:
#!/bin/bash
declare -i int=3;
declare -i dec=1000;
for i in $(seq 1 $int);do
for j in $(seq -f "%03g" 1 $dec);
do echo r$i.$j.txt; # or do find . -name "r$i.$j.txt";
done;
done;
回答1)对于浮点计算,您必须将任务委托给其他程序,如bc
例如:
echo”刻度=3;20.8/4 | bc
5.200
有关更多选项,您可以检查:
要查找具有浮点数的文件名,可以使用正则表达式和
find
命令:
$touch r3.987.txt
$find.-regextype sed-regex“*/r[0-9]\.[0-9]\{3\}.txt$”
./r3.987.txt
正则表达式类型为sed,find.means在当前目录中查找
- */=>仅检查文件名并跳过前导目录结构
- [0-9]匹配0到9范围内的任何数字
- \.表示匹配一个点
- [0-9]\{3\}表示[0-9]{3}精确匹配3个数字,每个数字可以在0-9范围内
- 最后以
.txt
$for filename in "$(find . -regextype sed -regex ".*/r[0-9]\.[0-9]\{3\}.txt$")"
> do
> echo "Filename is $filename"
> floatValueAsString=$(echo "$filename" | egrep -o '[0-9]\.[0-9]{3}')
> echo "Float value as string is $floatValueAsString"
> done
Filename is ./r3.987.txt
Float value as string is 3.987
处理2个整数有什么问题?
在{0..3}中处理a;在{000..999}中处理b;执行echo“r$a.$b.txt”;完成;完成
。耶,你是对的。。。