如果对linux shell 数组不是很熟悉的话,请看上一篇文章:linux shell 数组建立及使用技巧 ,这篇文章主要讲是动态生成数组系列。方法应该很多,我这里主要以一个求和计算的题目为例进行分析。
题目:请用linux shell 写一段脚本,实现从1..1000中所有偶数的和值。
方法一:
通过while 循环得到需要的结果:
start=1;
total=0;
while [ $start -le 1000 ];do
[[ $(($start%2)) == 0 ]]&&total=$(($total+$start));
start=$(($start+1));
done;
echo $total;
[chengmo@centos5 ~]$ start=1;total=0;while [ $start -le 1000 ];do [[ $(($start%2)) == 0 ]]&&total=$(($total+$start)); start=$(($start+1));done;echo $total;
250500
以上运行结果是:249500,在linux shell 中,”;”作为命令行分隔符。如果大家对于$(()) 运算符号不是很理解,可以查看:linux shell 实现 四则运算(整数及浮点) 简单方法 ,如果对于:[[]] [] 符号,可以参考另外一篇文章linux shell 逻辑运算符、逻辑表达式详解。
方法二:
通过 for 循环得到结果:
start=0;
total=0;
for i in $(seq $start 2 1000); do
total=$(($total+$i));
done;
echo $total;
[chengmo@centos5 ~]$ start=0;total=0;for i in $(seq $start 2 1000); do total=$(($total+$i));done;echo $total;
250500
上面语句已经代码方面明显优于方法一,而且性能方面表现也很好。下面比较就可以发现:
比较性能:
[chengmo@centos5 ~]$ time (start=0;total=0;for i in $(seq $start 2 1000); do total=$(($total+$i));done;echo $total;) 250500
real 0m0.016s
user 0m0.012s
sys 0m0.003s
[chengmo@centos5 ~]$ time (start=1;total=0;while [ $start -le 1000 ];do [[ $(($start%2)) == 0 ]]&&total=$(($total+$start)); start=$(($start+1));done;echo $total;)
250500
real 0m0.073s
user 0m0.069s
sys 0m0.004s
方法一耗时 是方法二的 6倍!
seq 使用:
seq [OPTION]... LAST
seq [OPTION]... FIRST LAST
seq [OPTION]... FIRST INCREMENT LAST
[chengmo@centos5 ~]$ seq 1000 ‘起始默认是 1,间隔默认也是1
[chengmo@centos5 ~]$seq 2 1000 ‘间隔默认是1
[chengmo@centos5 ~]$seq 1 3 10 '从1开始,到10 间隔为3 结果是:1 4 7 10
说明:默认间隔是“空格” 如果想换成其它的可以带参数:-s
[chengmo@centos5 ~]$seq -s'#' 1 3 10
1#4#7#10
应用技巧:
[chengmo@centos5 ~]$ a=($(seq 1 3 10))
[chengmo@centos5 ~]$ echo ${a[1]}
4
[chengmo@centos5 ~]$ echo ${a[@]}
1 4 7 10
[chengmo@centos5 ~]$ seq -s '#' 30 | sed -e 's/[0-9]*//g'
#############################
上面例子:通过加入间隔字符‘#’后,替换掉数字, 生成连续相同字符’#’,这个在以后书写中还是有不少帮助。
转载自:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839668.html
分享到:
相关推荐
关于linux数组定义,以及生成方法,请看:linux shell 动态生成 数组系列 seq使用技巧 。这里我主要说的是高效生成list 字符串,还有数组方法。 一、seq方法生成: [chengmo@centos5 shell]$ aNumList=$(seq ...
主要介绍了Shell动态生成数组的多种方法,本文给出while循环法和for循环法,以及使用seq生成数组法,需要的朋友可以参考下
之前自己在写shell脚本的时候,需要... 使用{1..100}这种方式简单明了,大家也可以在linux命令模式下直接:echo {1..100}看一下效果。 第二种方法: 使用seq函数 for i in `seq 1 100` do echo $i done
七、数组生成方法 10 1. #SEQ方法生成 10 2. 通过内部{BEGIN..END}生成 11 3. 以性能比较 11 4. 数组 11 八、LINUX系统常用配置方法及命令 11 1. 网卡相关的TCP/IP网络配置文件地址 11 2. #NETCONFIG命令可以永久...
linux中seq命令用法,seq(1 10)!
IBM数据生成器,seq类型,适合用于关联分析生成事务数据库,方便快捷;其中类似T40I10D100K的数据就是通过IBM数据生成器生成的。 使用方法:bin/seq_data_generator seq [options]
在 Linux 中生成数字列表的最简单方法之一是使用 seq(系列sequence)命令。其最简单的形式是,seq 接收一个数字参数,并输出从 1 到该数字的列表。例如: $ seq 5 1 2 3 4 5 除非另有指定,否则 seq 始终以 1 ...
seq2seq对联生成的数据集,包含搜狗预训练数据,用于生成对联,相关代码上传github中,地址https://github.com/zhangzhiqiangccm/NLP-project
使用最新版本的tensorflow实现seq2seq模型生成文本数据 摘要
读取一个文件,把每一行赋值给一个数组的变量,然后用for循环打印出来 代码如下:#!/bin/shi=1SUM=`sed -n ‘$=’ tmp.txt` ...附:shell数组补充知识 一、声明数组 1)array[key]=value # array[0]=one,array[1]=two2)de
中文歌词生成, Pytorch, Seq2Seq, Luong注意力, 按不同歌手风格生成歌词 基于Pytorch、Seq2Seq、Luong注意力机制的 中文歌词生成研究, 按不同歌手风格生成歌词 训练数据集来自我收集整理的中文歌词数据库: ...
前言 循环不管在程序中还是脚本中都需要经常用到,在写shell脚本时,经常需要for进行100次循环...以上这篇Linux shell 实现用for循环100次的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多
(传入数组seq[],当前位置i,剩余持50块人m个,剩余持100块人n个)
假设以数组sequ[0..MaxSize-1]存放环形队列的元素,同时设变量rear和len分别指示环形队列中队尾元素的位置和内含元素的个数。试写出此环形队列队满的条件,并设计相应入队和出队的算法。(读程序,根据题目填空完善...
SEQ Analyst(全称为Service & Experience Quality Analyst)作为客户体验管理使能平台,以数据分析存储平台和NetProbe被动探针为核心,可集成华为和第三方多种数据源,关联运营商网络中从无线、传输、核心网到应用等...
不知道你发现没有,这些类都有一个很明显的共性,都可以用来保存多个数据元素,最主要的功能是:每个类都支持下标(索引)访问该序列的元素,比如使用语法 Seq[i]。其实上面每个类都是使用 数组 这种简单的数据结构...
中文文本生成,诗词曲联生成、歌词生成、现代诗生成、问题扩增、自动摘要、文言文翻译、问题相似度模型、作文模型、新闻评论生成、商品文案生成、商品评价生成、小说生成、生成式问答、中英机器翻译、标签生成、文本...
本次作业本质上是文本生成的任务,序列到序列[1]模型是文本生成领域比较常用的一个算法,也是课程提供的参考文献[2]中使用的方法,采取了编码器-解码器的架构,用编码器编码输入,解码器则用来产生输出,两个模块...
seq命令用于产生整数序列。 02. 命令格式 用法: seq [选项]... 尾数 seq [选项]... 首数 尾数 seq [选项]... 首数 增量 尾数 03. 常用选项 以指定增量从首数开始打印数字到尾数。 -f, --format=格式 使用...