`
foolraty
  • 浏览: 400279 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
文章分类
社区版块
存档分类
最新评论

SHELL中的数值运算I(转)

阅读更多

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变量的数值运算.pdf

    Linux运维学习中,Shell脚本的编写是基础技能之一。在Shell编程中,变量的数值运算是一项非常重要的功能。本文将详细介绍Shell变量的...通过不断的实践和练习,可以加深对Shell数值运算的理解,并提升运维工作的效率。

    Shell编程范例之数值运算-TinyLab原创.

    《Shell编程范例之数值运算》由TinyLab原创,该文档属于《Shell编程范例序列》的第一章,主要介绍了在Shell编程中如何进行基本的数值运算,包括整数和浮点数的运算,以及如何使用Shell脚本来产生指定范围的随机数和...

    shell算数运算

    算术运算UNIX shell范例精解。整数运算(declare和let命令) declare命令 可以用declare –i命令定义整型变量。如果给整型变量赋一个字符串值,则bash将把变量赋值为0。可以对已定义的整型变量执行算术运算(如果变量未...

    「linuxshell编程学习笔记shell运算符号和运算命令」.docx

    在Linux Shell编程中,运算符号和运算命令是核心概念,用于执行数学计算和逻辑操作。以下是关于这些主题的详细说明: **一、Shell运算符号** 1. **加法 (+)**: 使用`expr`命令进行加法运算,例如 `expr 43 + 21` ...

    shell make file

    LET命令是bash shell的一个内置命令,专门用于执行整型算术运算以及数值表达式的测试。通过LET命令,我们可以进行如加、减、乘、除等基本运算操作,还可以实现更复杂的算术运算。 #### LET命令的基本用法 - **赋值...

    shell编程范例

    书中内容包括准备工作、数值运算、布尔运算、字符串操作、文件操作、文件系统操作、进程操作、网络操作以及用户管理等,每一部分都通过具体的脚本实例进行讲解,以便读者可以直观地理解并应用到实际工作中。...

    shell编程,sed,awk,grep等教程整理

    awk的内置变量和函数使数据分析变得极其灵活,它还可以处理数值运算和逻辑判断。 grep(Global Regular Expression Print)是用于搜索文本的命令,它根据正则表达式查找匹配的行。例如,`grep 'pattern' file`会找...

    Linux shell programming ppt

    Linux Shell编程是Linux系统中一个核心的组成部分,它充当用户与操作系统之间的接口,允许用户通过命令行进行交互操作。在Linux环境中,最常用的Shell是Bash(Bourne-Again SHell),它继承了Unix系统中的多种Shell...

    linux shell编程从初学到精通源码4-17全

    1. **基础语法**:了解Shell脚本的基本结构,包括注释、变量声明、赋值、字符串、数值运算以及条件语句(if-else)和循环语句(for、while)等。 2. **命令行参数**:学习如何在脚本中处理命令行传入的参数,这对于...

    LinuxShell脚本编程实例.doc

    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语句循环...

    linux中Shell编程

    6. **算术运算**:在Shell中,`expr`命令用于执行算术运算,例如`expr 4 + 5`。另外,还可以使用双括号`((...))`进行算术表达式运算,避免字符串处理。 7. **测试命令**:`test`命令用于检查条件是否为真,支持各种...

    linux的shell编程

    4. 数值运算: - `expr`命令:在示例2中,使用`expr`进行加法运算,将变量`i`增加2。 5. 程序参数: - `$1`表示第一个命令行参数,`$0`代表脚本本身的路径,如示例3所示。 6. `case`语句: - 用于根据用户输入...

    shell语言编程指南

    Shell编程是Linux系统中用于自动化任务和管理系统的核心工具。它是一种解释性的脚本语言,允许用户通过命令行界面执行一系列指令。本文档,即《高级Bash脚本编程指南》,旨在帮助从零基础到有一定经验的程序员深入...

    shell学习日志总结

    从给定的文件信息中,我们可以提取到关于Shell脚本、Awk以及Sed的一些关键知识点,下面将详细解析这些内容: ### Shell 脚本基础 #### 变量读取与赋值 在Shell中,可以使用`read`命令从输入流中读取数据并赋值给...

    Linux_shell脚本入门教程.pdf

    - **重要性**: 在Linux系统中,虽然存在多种图形界面工具,但Shell作为一种强大的编程语言,能够提供更加灵活的功能支持。Shell不仅可以收集命令,还能实现任务自动化,特别是在系统管理任务方面表现突出。对于那些...

    bash shell 详解

    变量类型默认为字符串,如1+2会被解释为字符串而不是数值运算。 关于变量的内容累加,可以通过$变量名或${变量名}的方式进行拼接。这里需要区分单引号和双引号的作用,单引号中的内容会被原样输出,而双引号中的...

    linux shell 编程入门

    4. **数据流控制**:Shell 支持灵活的数据流控制机制,包括通配符、输入/输出重定向、管道等,方便进行模式匹配、I/O 处理和数据传输。 5. **流程控制**:Shell 提供了顺序、分支和循环等流程控制结构。 6. **后台...

Global site tag (gtag.js) - Google Analytics