我想爲名爲「r?。???。txt」的所有文件執行for循環,其中?。????是從0.000到3.999的浮動。但是,bash並沒有整數,據我所知...這變成頭痛...在bash中作爲變量文件名的截斷浮點數
我試圖做冗長乏味的循環與兩個變量代表小數前後的數字。但是,如果您有?.00?,我仍然需要插入零。因此,我將需要對浮點數進行適當的處理以及如何存儲/輸出它們。
總之,有兩個問題,我面對
- 做浮在bash
- 輸出浮動的值和傳遞到文件名
謝謝。
我想爲名爲「r?。???。txt」的所有文件執行for循環,其中?。????是從0.000到3.999的浮動。但是,bash並沒有整數,據我所知...這變成頭痛...在bash中作爲變量文件名的截斷浮點數
我試圖做冗長乏味的循環與兩個變量代表小數前後的數字。但是,如果您有?.00?,我仍然需要插入零。因此,我將需要對浮點數進行適當的處理以及如何存儲/輸出它們。
總之,有兩個問題,我面對
謝謝。
使用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)對於float計算,你將不得不任務委託給其他程序,如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的,找到。裝置找到在當前目錄
*/=>僅只檢查文件名和跳過前導目錄結構
[0-9]匹配範圍爲0的任何數字至9
\。裝置匹配點
[0-9] \ {3 \}裝置[0-9] {3}精確匹配3位和每個數字可以是在範圍0-9
和最後在.txt
爲答案2結尾)你可以通過find命令
$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}中的一個;爲{000..999}中的b做;做回聲「r $ a。$ b.txt」;完成; done'。 –
雅,你說得對... – Simon