当前位置:K88软件开发文章中心网站服务器框架Shell → 文章内容

Shell 数值运算

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-23 14:39:33

rt: 排序uniq -c:统计相同行的个数,即每个单词的个数sort -n -k 1 -r:按照第一列 -k 1 的数字 -n 逆序 -r 排序head -10:取出前十行范例:统计指定单词出现次数可以考虑采取两种办法:只统计那些需要统计的单词用上面的算法把所有单词的个数都统计出来,然后再返回那些需要统计的单词给用户不过,这两种办法都可以通过下面的结构来实现。先看办法一:#!/bin/bash# statistic_words.shif [ $# -lt 1 ]; then echo "Usage: basename $0 FILE WORDS ...." exit -1fiFILE=$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 -cdone说明:if 条件部分:要求至少两个参数,第一个单词文件,之后参数为要统计的单词FILE=$1: 获取文件名,即脚本之后的第一个字符串((WORDS_NUM=$#-1)):获取单词个数,即总的参数个数 $# 减去文件名参数(1个)for 循环部分:首先通过 seq 产生需要统计的单词个数系列,shift 是 Shell 内置变量(请通过 help shift 获取帮助),它把用户从命令行中传入的参数依次往后移动位置,并把当前参数作为第一个参数即 $1,这样通过 $1就可以遍历用户所有输入的单词(仔细一想,这里貌似有数组下标的味道)。你可以考虑把 shift 之后的那句替换成 echo $1 测试 shift 的用法演示:$ chmod +x statistic_words.sh$ ./statistic_words.sh index.html tinylab linux python 175 tinylab 43 linux 3 python再看办法二,我们只需要修改 shift 之后的那句即可:#!/bin/bash# statistic_words.shif [ $# -lt 1 ]; then echo "ERROR: you should input 2 words at least"; echo "Usage: basename $0 FILE WORDS ...." exit -1fiFILE=$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演示:$ ./statistic_words.sh index.html tinylab linux python 175 tinylab 43 linux 3 python说明:很明显,办法一的效率要高很多,因为它提前找出了需要统计的单词,然后再统计,而后者则不然。实际上,如果使用 grep 的 -E 选项,我们无须引入循环,而用一条命令就可以搞定:$ cat index.html | sed -e "s/[^a-zA-Z]/\n/g" | grep -v ^$ | sort | grep -E "^tinylab$|^linux$" | uniq -c 43 linux 175 tinylab或者$ cat index.html | sed -e "s/[^a-zA-Z]/\n/g" | grep -v ^$ | sort | egrep "^tinylab$|^linux$" | uniq -c 43 linux 175 tinylab说明:需要注意到 sed 命令可以直接处理文件,而无需通过 cat 命令输出以后再通过管道传递,这样可以减少一个不必要的管道操作,所以上述命令可以简化为:$ sed -e "s/[^a-zA-Z]/\n/g" index.html | grep -v ^$ | sort | egrep "^tinylab$|^linux$" | uniq -c 43 linux 175 tinylab所以,可见这些命令 sed,grep,uniq,sort 是多么有用,它们本身虽然只完成简单的功能,但是通过一定的组合,就可以实现各种五花八门的事情啦。对了,统计单词还有个非常有用的命令 wc -w,需要用到的时候也可以用它。补充:在 Advanced Bash-Scripting Guide 一书中还提到 jot 命令和 factor 命令,由于机器上没有,所以没有测试,factor 命令可以产生某个数的所有素数。如:$ factor 100100: 2 2 5 5小结到这里,Shell 编程范例之数值计算就结束啦。该篇主要介绍了:Shell 编程中的整数运算、浮点运算、随机数的产生、数列的产生Shell 的内置命令、外部命令的区别,以及如何查看他们的类型和帮助Shell 脚本的几种执行办法几个常用的 Shell 外部命令: sed,awk,grep,uniq,sort 等范例:数字递增;求月均收入;自动获取 IP 地址;统计单词个数其他:相关用法如命令列表,条件测试等在上述范例中都已涉及,请认真阅读之如果您有时间,请温习之。资料Advanced Bash-Scripting Guideshell 十三问shell 基础十二篇SED 手册AWK 使用手册几个 Shell 讨论区LinuxSir.orgChinaUnix.net后记大概花了 3 个多小时才写完,目前是 23:33,该回宿舍睡觉啦,明天起来修改错别字和补充一些内容,朋友们晚安!10 月 31 号,修改部分措辞,增加一篇统计家庭月均收入的范例,添加总结和参考资料,并用附录所有代码。Shell 编程是一件非常有趣的事情,如果您想一想:上面计算家庭月均收入的例子,然后和用 M$ Excel 来做这个工作比较,你会发现前者是那么简单和省事,而且给您以运用自如的感觉。

上一页  [1] [2] [3] 


Shell 数值运算