#!/bin/bash
echo "please input number:"
read n
a=`expr $n / 100`
#a1=`expr $n - $a * 100`
b=`echo "($n-$a*100)/10" | bc`
c=`echo "($n-$a*100-$b*10)" | bc`
d=`echo "$c*100+$b*10+$a" | bc`
echo $d
转:http://bbs.techrepublic.com.cn/viewthread.php?tid=140425
1.对某个数加一
$ i=0;
$ ((i++))
$ echo $i
1
$ let i++
$ echo $i
2
$ expr $i + 1
3
$ echo $i
2
$ echo $i 1 | awk '{printf $1+$2}'
let i++;
i=$(expr $i + 1)
i=$(echo $i+1|bc)
i=$(echo "$i 1" | awk '{printf $1+$2;}')
2.用time统计脚本运行时间
$ time calc.sh
10000
real 0m1.319s
user 0m1.056s
sys 0m0.036s
$ time calc_let.sh
3.用shell的内置命令查看各个命令的类型如下:
$ type type
type is a shell builtin
$ type let
let is a shell builtin
$ type expr
expr is hashed (/usr/bin/expr)
$ type bc
bc is hashed (/usr/bin/bc)
$ type awk
awk is /usr/bin/awk
4.let,expr,bc都可以用来求模,运算符都是%,而let和bc可以用来求幂,运算符不一样,前者是**,后者是^
//求模
$ expr 5 % 2
1
$ let i=5%2
$ echo $i
1
$ echo 5 % 2 | bc
1
$ ((i=5%2))
$ echo $i
1
//求幂
$ let i=5**2
$ echo $i
25
$ ((i=5**2))
$ echo $i
25
$ echo "5^2" | bc
25
5.浮点预算,let和expr都无法进行浮点运算,但是bc和awk可以。
例一:
$ echo "scale=3; 1/13" | bc
.076
$ echo "1 13" | awk '{printf("%0.3f\n",$1/$2)}'
0.077
例二:
$ echo 1/13100 | bc -l
.00007633587786259541
例三:假如有这样一组数据,存放有某个村庄所有家庭的人数和月总收入,要求找 出人均月收入最高的家庭。文件名为innode
1 3 4490
2 5 3896
3 4 3112
4 4 4716
5 4 4578
6 6 5399
7 3 5089
8 6 3029
9 4 6195
10 5 5145
注:通过下面脚本产生上面三列随机数:
for i in $(seq 1 10);do echo $i $(($RANDOM/8192+3)) $((RANDOM/10+3000));done
说明:上面的三列数据分别是家庭编号、家庭人数、家庭月总收入。
分析:为了求出月均收入最高的家庭,我们需要对后面两列数进行除法运算,即求出每个家庭的月均收入,然后按照月均收入排序,找出收入最高的家庭。
#!/bin/bash
# gettopfamily.sh
[ $# -lt 1 ] && echo "please input the file who store the income data" && exit -1[ ! -f $1 ] && echo "$1 is not a file" && exit -1income=$1awk '{ printf("%d %0.2f\n", $1, $3/$2);}' $income | sort -k 2 -n -r
6.产生一个随机数
环境变量RANDOM产生0到32767的随机数,而awk的rand函数可以产生0到1之间的随机数。
例一:
$ echo $RANDOM
81
$ echo "" | awk '{srand(); printf("%f", rand());}'
0.237788
说明:srand在无参数时,采用当前时间作为rand随机数产生器的一个seed
7.统计某篇文章中单词出现的个数:
cat text | sed -e "s/[^a-zA-Z]/\n/g" | grep -v ^$ | sort | uniq -c
8.统计出出现频率最高的前10个单词
cat text | sed -e "s/[^a-zA-Z]/\n/g" | grep -v ^$ | sort | uniq -c | sort -n -k 1 -r | head -10
说明:
cat text: 显示text文件里的内容
sed -e "s/[^a-zA-Z]/\n/g": 把非字母的字符全部替换成空格,这样整个文本只剩下字母字符
grep -v ^$:去掉空行
sort: 排序
uniq -c:统计相同行的个数,即每个单词的个数
sort -n -k 1 -r:按照第一列(-k 1)的数字(-n)逆序(-r)排序
head -10:取出前十行
9.统计文章里含有的指定单词的数量
代码一
#!/bin/bash
# statistic_words.sh
if [ $# -lt 1 ]; then
echo "ERROR: you should input 2 words at least";
echo "Usage: basename $0 FILE WORDS ...."
exit -1
fi
FILE=$1
((WORDS_NUM=$#-1))
for n in $(seq $WORDS_NUM)
do
shift cat $FILE | sed -e "s/[^a-zA-Z]/\n/g" | grep -v ^$ | sort | grep ^$1$ | uniq -c
done
代码二
#!/bin/bash
# statistic_words.sh
if [ $# -lt 1 ]; then
echo "ERROR: you should input 2 words at least";
echo "Usage: basename $0 FILE WORDS ...."
exit -1
fi
FILE=$1
((WORDS_NUM=$#-1))
for n in $(seq $WORDS_NUM)
do
shift cat $FILE | sed -e "s/[^a-zA-Z]/\n/g" | grep -v ^$ | sort | uniq -c | grep " $1$"
done
说明:很明显,采用第一种办法效率要高很多,因为第一种办法提前找出了需要统计的单词,然后再统计,而后者则不然。实际上,如果使用grep的-E选项, 我们无须引入循环,而用一条命令就可以搞定:
$ cat text | sed -e "s/[^a-zA-Z]/\n/g" | grep -v ^$ | sort | grep -E "^Action$|^is$" | uniq
-c
或者
$ cat text | sed -e "s/[^a-zA-Z]/\n/g" | grep -v ^$ | sort | egrep "^Action$|^is$" | uniq
-c
补充:
在《高级Bash脚本编程指南》一书中还提到jot命令和factor命令
factor产生一个数的所有素数
- shell中的数值计算1/3=0.33
方法1:使用bc工具,把结果printf格式化 res=$(printf "%.5f" `echo "scale=5;1/3"|bc`) echo $res 0 ...
- linux shell 中的sleep命令
开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...
- shell 中的与、或表达式
今天总结一下linux shell中逻辑关机表达方式.逻辑与的表达: 1).if [ $xxx=a -a $xx=b ] 注:-a表示and的意思 2).if [ $xxx=a ] && ...
- shell简单用法笔记(shell中数值运算)二
shell中变量值,如果不手动指定类型,默认都是字符串类型: 例如: a= b= c=$a+#b echo $c 结果会输出:123+456 shell中,如果要进行数值运算,可以通过一下方法: 方法 ...
- shell中{}的妙用
shell中${}的妙用 1. 截断功能 ${file#*/}: 拿掉第一条/及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}: 拿 ...
- shell中命令之间数据的传递
1.管道 "|" ls | cat -n > out.txt 2. 子shell 2.1 子shell 说明 在shell脚本中可以用()操作符可以定义一个子shell #/ ...
- shell中&&和||的使用方法
测试题: [ -z "" ] && echo 0 || echo 1 的结果是多少 看看这两个 && || 的用户 http://blog.csd ...
- 任督二脉之Shell中的正则表达式
VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进. Shell的基础学习之前已经总结了一篇博客:http://www.cnblogs.com/jyz ...
- shell中条件判断if中的-z到-d的意思
shell中条件判断if中的-z到-d的意思 [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真. [ -c FILE ] 如果 ...
随机推荐
- Firefox--Date.parse()
比较两个时间字符串的时间大小用到了Date.parse()这个静态方法. 火狐下:Date.parse("2014-07-05 22:05:05") 返回的是NaN. 其它浏览器: ...
- 怎样在Swift中使用CocoaPods-b
最近关于CocoaPods有很多的议论.你可能从别的开发者那里听到过,或者在Github的目录中看到过.如果你之前从来没有用过,你可能会问,"CocoaPods到底是什么?" 它不 ...
- Java获取ip地址的几种方法
以下内容介绍下java获取ip地址的几种思路. 1.直接利用java.net.InetAddress类获取,不过这种方法只在windows环境下有效,在linux环境下只能获取localhost地址( ...
- makefile简单介绍
现在的IDE环境大多是高度集成的,只需要按一个按钮即可完成编译-汇编-链接的工作,但是实际在嵌入式开发的过程中,需要根据实际需要编写个性化的需求,这就需要掌握makefile的写法. 高级IDE的方便 ...
- 转:Hprose for php(三)——客户端
文章来自于:http://blog.csdn.net/half1/article/details/21329785 本文将介绍Hprose for php客户端的更多细节. 1.直接通过远程方法名进行 ...
- mongodb 排序 Unable to determine the serialization information for the expression 异常
好久没用mongodb了...最近又开始用起来了. 遇到情景: 2句话分开写.是正常的,因为我是先取再排序的 然而.我想直接排序出来. 就写在了一起.最后.ToList() 然后报 Una ...
- 001Spring4.2基本环境搭建
1:工程目录以及依赖jar包如下,如果缺少某些jar包在weblogic控制台下面会有提示 2:applicationContext.xml配置文件 <?xml version="1. ...
- KEIL C51 中嵌入汇编以及C51与A51间的相互调用
如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例 有关c51调用汇编的方法已经有很多帖子讲到,但是一般只讲要点,很少有对整个过程作详细描述,对于初学者是不够的,这里笔者通过一个简单例子 ...
- android Base64加密解密
// 加密传入的数据是byte类型的,并非使用decode方法将原始数据转二进制,String类型的数据 使用 str.getBytes()即可 String str = "Hello!&q ...
- -_-#【Canvas】圆弧运动
var canvas = document.getElementById('canvas') var context = canvas.getContext('2d') var angle = 0 f ...