我想为名称为" r?。???。txt"的所有文件执行for循环,其中?。???是从0.000到3.999的浮动。但是,据我所知,bash没有整数...这变得很头疼......
我尝试用繁琐的for循环做两个变量来表示十进制之前和之后的数字。但是,如果你有?.00?我还需要插入零。因此,我需要对浮点数进行适当处理以及如何存储/输出它们。
总之,我面临两个问题
谢谢。
答案 0 :(得分:1)
使用2个变量是一个好主意。
您可以使用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 :(得分:0)
答案1)对于浮点计算,您必须将任务委托给其他程序,例如bc。
例如:
echo "scale=3;20.8/4 | bc
5.200
有关更多选项,请查看:
https://unix.stackexchange.com/questions/40786/how-to-do-integer-float-calculations-in-bash-or-other-languages-frameworks
https://unix.stackexchange.com/questions/76060/perform-floating-point-arithmetic-in-shell-script-variable-definitions
How do I use floating-point division in bash?
找出具有浮点数的文件名,你可以使用正则表达式和find
命令:
$touch r3.987.txt
$find . -regextype sed -regex ".*/r[0-9]\.[0-9]\{3\}.txt$"
./r3.987.txt
正则表达式类型是sed,find。表示在当前目录中查找
* / =>仅检查文件名并跳过主要目录结构
[0-9]匹配范围0到9
\。意味着匹配一个点
[0-9] \ {3 \}表示[0-9] {3}正好匹配3位数,每位数字可以在0-9范围内
最后以.txt
对于答案2)你可以通过循环查找命令的输出将该浮点值作为字符串
$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