⑴ linux Shell編程中常用的數學計算方法:expr,let,bc及其他。哪個效率更高一點
從效率來說let==$(()) > expr > bc,這個是絕對的。
let和$(())運行是內建命令,使用相同的演算法。
expr和bc是外部程序,專expr的體積幾乎等屬於bc的1/3,執行一次裝入內存所消耗的時間就不一樣。
從運算能力來說,自然bc排第一位。
其實還有awk,能更好的執行基本運算、匯總、求平均等更復雜的。而且還可以使用數組、哈希表。
⑵ linux shell 計算平均值
1班(class1)的平均值:
awk 'BEGIN{sum=0;num=0}{if($2=="class1"){sum+=$3;num+=1}}END{printf "%f\n",sum/num}' c.txt
2班(class2)的平均值:
awk 'BEGIN{sum=0;num=0}{if($2=="class2"){sum+=$3;num+=1}}END{printf "%f\n",sum/num}' c.txt
3班(class3)的平均值:
awk 'BEGIN{sum=0;num=0}{if($2=="class3"){sum+=$3;num+=1}}END{printf "%f\n",sum/num}' c.txt
⑶ linux shell 如何實現浮點運算
linux shell本身只是一個腳本語言,使用操作系統的命令或已安裝的程序進行運算。你出的題咋一看有難度,實際上是個偽命題,只要有個已經安裝好的支持高精度浮點運算的支持外部調用的計算器程序,寫個shell實現這個命題太簡單了。如果只是依賴操作系統內置的計算器,那就復雜很多。需要考慮把數字轉成文本,進行截斷後,再轉成數字,分段進行計算,然後再將結果進行組合,最終結果需要以文本方式輸出,理論上也可以實現。
⑷ linux shell 怎麼計算設備文件的md5
你好:
linux系統下面(ubuntu、redhat等等)有一個命令是MD5sum,你可以使用md5sum + 文件名,就可以算出來的
⑸ linux shell 怎麼計算輸入的任意個數的和
sum=0
while [ 1 ]
do
read one
if [ one -eq 0 ]
then
exit
fi
sum=`expr $sum +$one `
done
echo $sum
輸入0停止輸入,任意多個數,需要有一個標識內來表示數據輸入結容束
⑹ 用Linux shell 計算兩個時間差
start=`date +%s -d "2011-11-28 15:55:37"`
end=`date +%s -d "2011-11-28 15:55:52"`
echo $(($end-$start))
這個前提是你能拿到開始和結束時間字串的基礎上的。
如果你的日誌文件輸出版格式是上述的話,還權有個方法:
cat 日誌文件 | awk '/^000/{
start=$2 " " $3
end=$4 " " $5
stm=mktime(gensub(/[:-]/, " ", "g", start))
etm=mktime(gensub(/[:-]/, " ", "g", end))
print $1 " - " etm-stm
}'
⑺ LINUX shell 遇到的問題。 我想計算1+2+3+4.到100
這里
i
是當做計數器用的,每次循環遞增1。r
是當做累加器用的,將
i
的值進行累加。
這里沒有用for循環,而是用的while循環,其實是一樣的,而且while循環更為通用(sh不支持for循環)。
循環的次數也是有定義的,while
[
"$i"
!=
"100"
]這句就是定義,只要
i
沒遞增到100,就會一直循環。其實這句從語義上來說是不對的,這里是整數的比較而不是字元串的比較,所以比較符應該用-ne而不要用!=,即,應該寫成
while
[
$i
-ne
100
]
下面是個更為簡單的實現,你可以體會一下(shell中的變數其實不需要初始化,自有其默認值)。
#!/bin/bash
for
i
in
{1..100}
do
r=$((r+i))
done
echo
$r
⑻ 在Linux下,編寫 一個Shell程序,計算磁碟上所有目錄下平均文件個數
我想問一下,計算的是根目錄文件夾還是還是包含目錄下各子文件夾?
如果根目錄文件夾比較好寫,如果加上子目錄。數量太大了。我想了一個思路,不過感覺很笨。
你參考一下吧,
1.統計所有的目錄整理成一個目錄文件
2.依次按照整理的目錄文件開始統計各目錄下的文件數,整理成一個統計文件
3.讀取統計文件數據開始計算,最後整理出一個平均文件個數的日誌。
其實這個題不是很難,看看書完全可以自寫,就是比較繁瑣。而且測試起來太慢了。
因為需要search整個磁碟。實在懶得寫。。不好意思。
⑼ linux shell程序設計,輸入n,計算1+1/2+1/3+...+1/n。要求調用bc
[oracle@localhost test]$ cat c.sh
#!/bin/sh
b=0
echo "請出入n的值:"
read n
for ((a=1;a<=n;a++))
do
b=1/$a+$b
done
c=`bc<<!
scale=5
$b
!
`
echo "運算式是:$b"
echo "最後的結果是:$c"
[oracle@localhost test]$ sh c.sh
請出入n的值:
20
運算式是:1/20+1/19+1/18+1/17+1/16+1/15+1/14+1/13+1/12+1/11+1/10+1/9+1/8+1/7+1/6+1/5+1/4+1/3+1/2+1/1+0
最後的結果是:3.59768
[oracle@localhost test]$
⑽ linuxshell怎麼計算設備文件的md5
計算設備文件來的md5所要用到的命令源就是 md5sum
man一下md5sum命令,得到md5sum命令的用法:
md5sum [OPTION]… [FILE]…
1、計算指定文件的MD5值(如a.rmvb)
md5sum a.rmvb
輸出結果類似如下:
a.rmvb
即計算出的md5值加上文件名
測試了一下,發現這命令算一2G多的電影所用時間不過幾十鈔,效率還行。
2、計算字元串MD5值(如字元串 「password」)
echo -n 「password」 | md5sum
輸出:
–
上面echo加 -n的作用是去除串結尾的回車符,因為echo命令默認會添加一回車符。
像如果是:
echo 「password」 | md5sum
那輸出的將會是:
–
不加-n與加-n結果是不一樣的。正確的做法一般是要加-n參數。