SHELL中的数值运算I
2010-05-28 17:31
#!/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
|
分享到:
相关推荐
Linux运维学习中,Shell脚本的编写是基础技能之一。在Shell编程中,变量的数值运算是一项非常重要的功能。本文将详细介绍Shell变量的...通过不断的实践和练习,可以加深对Shell数值运算的理解,并提升运维工作的效率。
《Shell编程范例之数值运算》由TinyLab原创,该文档属于《Shell编程范例序列》的第一章,主要介绍了在Shell编程中如何进行基本的数值运算,包括整数和浮点数的运算,以及如何使用Shell脚本来产生指定范围的随机数和...
算术运算UNIX shell范例精解。整数运算(declare和let命令) declare命令 可以用declare –i命令定义整型变量。如果给整型变量赋一个字符串值,则bash将把变量赋值为0。可以对已定义的整型变量执行算术运算(如果变量未...
在Linux Shell编程中,运算符号和运算命令是核心概念,用于执行数学计算和逻辑操作。以下是关于这些主题的详细说明: **一、Shell运算符号** 1. **加法 (+)**: 使用`expr`命令进行加法运算,例如 `expr 43 + 21` ...
LET命令是bash shell的一个内置命令,专门用于执行整型算术运算以及数值表达式的测试。通过LET命令,我们可以进行如加、减、乘、除等基本运算操作,还可以实现更复杂的算术运算。 #### LET命令的基本用法 - **赋值...
书中内容包括准备工作、数值运算、布尔运算、字符串操作、文件操作、文件系统操作、进程操作、网络操作以及用户管理等,每一部分都通过具体的脚本实例进行讲解,以便读者可以直观地理解并应用到实际工作中。...
awk的内置变量和函数使数据分析变得极其灵活,它还可以处理数值运算和逻辑判断。 grep(Global Regular Expression Print)是用于搜索文本的命令,它根据正则表达式查找匹配的行。例如,`grep 'pattern' file`会找...
Linux Shell编程是Linux系统中一个核心的组成部分,它充当用户与操作系统之间的接口,允许用户通过命令行进行交互操作。在Linux环境中,最常用的Shell是Bash(Bourne-Again SHell),它继承了Unix系统中的多种Shell...
1. **基础语法**:了解Shell脚本的基本结构,包括注释、变量声明、赋值、字符串、数值运算以及条件语句(if-else)和循环语句(for、while)等。 2. **命令行参数**:学习如何在脚本中处理命令行传入的参数,这对于...
4. 数值运算 ```bash #!/bin/bash num=0 while [ $num -le 10 ]; do num=`expr $num + 1` if [ $num -eq 5 ]; then continue fi square=`expr $num \* $num` echo $square done ``` 以上脚本使用while语句循环...
6. **算术运算**:在Shell中,`expr`命令用于执行算术运算,例如`expr 4 + 5`。另外,还可以使用双括号`((...))`进行算术表达式运算,避免字符串处理。 7. **测试命令**:`test`命令用于检查条件是否为真,支持各种...
4. 数值运算: - `expr`命令:在示例2中,使用`expr`进行加法运算,将变量`i`增加2。 5. 程序参数: - `$1`表示第一个命令行参数,`$0`代表脚本本身的路径,如示例3所示。 6. `case`语句: - 用于根据用户输入...
Shell编程是Linux系统中用于自动化任务和管理系统的核心工具。它是一种解释性的脚本语言,允许用户通过命令行界面执行一系列指令。本文档,即《高级Bash脚本编程指南》,旨在帮助从零基础到有一定经验的程序员深入...
从给定的文件信息中,我们可以提取到关于Shell脚本、Awk以及Sed的一些关键知识点,下面将详细解析这些内容: ### Shell 脚本基础 #### 变量读取与赋值 在Shell中,可以使用`read`命令从输入流中读取数据并赋值给...
- **重要性**: 在Linux系统中,虽然存在多种图形界面工具,但Shell作为一种强大的编程语言,能够提供更加灵活的功能支持。Shell不仅可以收集命令,还能实现任务自动化,特别是在系统管理任务方面表现突出。对于那些...
变量类型默认为字符串,如1+2会被解释为字符串而不是数值运算。 关于变量的内容累加,可以通过$变量名或${变量名}的方式进行拼接。这里需要区分单引号和双引号的作用,单引号中的内容会被原样输出,而双引号中的...
4. **数据流控制**:Shell 支持灵活的数据流控制机制,包括通配符、输入/输出重定向、管道等,方便进行模式匹配、I/O 处理和数据传输。 5. **流程控制**:Shell 提供了顺序、分支和循环等流程控制结构。 6. **后台...