我的任务是创建一个脚本,显示文件中随机字符的频率。输出应以百分比显示a到z的频率(不区分大小写)。 我在下面创建了这个脚本,我只是想知道是否有办法让它更简单?有人可以看看我的bash脚本和建议如何使它更简单吗?
#!/bin/bash
echo Hello, please tell me in which file shall I count the letters:
read file
TOTAL=$(grep -o [[:alpha:]] $file | wc -l)
A=$(grep -io a $file | wc -l)
B=$(grep -io b $file | wc -l)
C=$(grep -io c $file | wc -l)
D=$(grep -io d $file | wc -l)
E=$(grep -io e $file | wc -l)
F=$(grep -io f $file | wc -l)
G=$(grep -io g $file | wc -l)
H=$(grep -io h $file | wc -l)
I=$(grep -io i $file | wc -l)
J=$(grep -io j $file | wc -l)
K=$(grep -io k $file | wc -l)
L=$(grep -io l $file | wc -l)
M=$(grep -io m $file | wc -l)
N=$(grep -io n $file | wc -l)
O=$(grep -io o $file | wc -l)
P=$(grep -io p $file | wc -l)
Q=$(grep -io q $file | wc -l)
R=$(grep -io R $file | wc -l)
S=$(grep -io s $file | wc -l)
T=$(grep -io t $file | wc -l)
U=$(grep -io u $file | wc -l)
V=$(grep -io v $file | wc -l)
W=$(grep -io w $file | wc -l)
X=$(grep -io x $file | wc -l)
Y=$(grep -io y $file | wc -l)
Z=$(grep -io z $file | wc -l)
echo Frequency of 'a': $(($A*100/$TOTAL))%
echo Frequency of 'b': $(($B*100/$TOTAL))%
echo Frequency of 'c': $(($C*100/$TOTAL))%
echo Frequency of 'd': $(($D*100/$TOTAL))%
echo Frequency of 'e': $(($E*100/$TOTAL))%
echo Frequency of 'f': $(($F*100/$TOTAL))%
echo Frequency of 'g': $(($G*100/$TOTAL))%
echo Frequency of 'h': $(($H*100/$TOTAL))%
echo Frequency of 'i': $(($I*100/$TOTAL))%
echo Frequency of 'j': $(($J*100/$TOTAL))%
echo Frequency of 'k': $(($K*100/$TOTAL))%
echo Frequency of 'l': $(($L*100/$TOTAL))%
echo Frequency of 'm': $(($M*100/$TOTAL))%
echo Frequency of 'n': $(($N*100/$TOTAL))%
echo Frequency of 'o': $(($O*100/$TOTAL))%
echo Frequency of 'p': $(($P*100/$TOTAL))%
echo Frequency of 'q': $(($Q*100/$TOTAL))%
echo Frequency of 'r': $(($R*100/$TOTAL))%
echo Frequency of 's': $(($S*100/$TOTAL))%
echo Frequency of 't': $(($T*100/$TOTAL))%
echo Frequency of 'u': $(($U*100/$TOTAL))%
echo Frequency of 'v': $(($V*100/$TOTAL))%
echo Frequency of 'w': $(($W*100/$TOTAL))%
echo Frequency of 'x': $(($X*100/$TOTAL))%
echo Frequency of 'y': $(($Y*100/$TOTAL))%
echo Frequency of 'z': $(($Z*100/$TOTAL))%
我认为使用循环如下脚本取代上面的脚本的第一部分......但后来,我被卡住,因为我不知道是否有任何的工作方式这些产出进一步?
#!/bin/bash
echo File:
read file
TOTAL=$(grep -o [[:alpha:]] $file | wc -l)
for letter in {a..z}
do echo grep -io $letter $file | wc -l
done
我也想问问,如果有什么办法如何让我的脚本的输出保留两位小数?
这是我的第一个脚本,所以请仁慈:)但我会很感激任何反馈或建议如何变得更好。
尝试在http://codereview.stackexchange.com/ – Inian
谢谢你的小费! – EvelinaCZ