`
wode66
  • 浏览: 738101 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux shell 动态生成 数组系列 seq使用技巧

 
阅读更多

 

如果对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

 

分享到:
评论

相关推荐

    Shell中创建序列和数组(list、array)的方法

    关于linux数组定义,以及生成方法,请看:linux shell 动态生成 数组系列 seq使用技巧 。这里我主要说的是高效生成list 字符串,还有数组方法。   一、seq方法生成: [chengmo@centos5 shell]$ aNumList=$(seq ...

    Shell动态生成数组的多种方法

    主要介绍了Shell动态生成数组的多种方法,本文给出while循环法和for循环法,以及使用seq生成数组法,需要的朋友可以参考下

    Linux在shell中自动生成1到100的数组方法(两种方法)

    之前自己在写shell脚本的时候,需要... 使用{1..100}这种方式简单明了,大家也可以在linux命令模式下直接:echo {1..100}看一下效果。  第二种方法:  使用seq函数  for i in `seq 1 100`  do  echo $i  done

    LINUX and SHELL 自学总结

    七、数组生成方法 10 1. #SEQ方法生成 10 2. 通过内部{BEGIN..END}生成 11 3. 以性能比较 11 4. 数组 11 八、LINUX系统常用配置方法及命令 11 1. 网卡相关的TCP/IP网络配置文件地址 11 2. #NETCONFIG命令可以永久...

    linux中seq命令用法

    linux中seq命令用法,seq(1 10)!

    IBM数据生成器(Seq)

    IBM数据生成器,seq类型,适合用于关联分析生成事务数据库,方便快捷;其中类似T40I10D100K的数据就是通过IBM数据生成器生成的。 使用方法:bin/seq_data_generator seq [options]

    使用 Linux seq 命令生成数字序列(推荐)

    在 Linux 中生成数字列表的最简单方法之一是使用 seq(系列sequence)命令。其最简单的形式是,seq 接收一个数字参数,并输出从 1 到该数字的列表。例如: $ seq 5 1 2 3 4 5 除非另有指定,否则 seq 始终以 1 ...

    使用seq2seq生成对联的数据集

    seq2seq对联生成的数据集,包含搜狗预训练数据,用于生成对联,相关代码上传github中,地址https://github.com/zhangzhiqiangccm/NLP-project

    Python-使用最新版本的tensorflow实现seq2seq模型生成文本数据摘要

    使用最新版本的tensorflow实现seq2seq模型生成文本数据 摘要

    shell for循环与数组应用介绍

    读取一个文件,把每一行赋值给一个数组的变量,然后用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注意力, 按不同歌手风格生成歌词 基于Pytorch、Seq2Seq、Luong注意力机制的 中文歌词生成研究, 按不同歌手风格生成歌词 训练数据集来自我收集整理的中文歌词数据库: ...

    Linux shell 实现用for循环100次的方法

    前言 循环不管在程序中还是脚本中都需要经常用到,在写shell脚本时,经常需要for进行100次循环...以上这篇Linux shell 实现用for循环100次的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多

    fan(//传入数组seq[],当前位置i,剩余持50块人m个,剩余持100块人n个)

    (传入数组seq[],当前位置i,剩余持50块人m个,剩余持100块人n个)

    1_C语言_假设以数组sequ_

    假设以数组sequ[0..MaxSize-1]存放环形队列的元素,同时设变量rear和len分别指示环形队列中队尾元素的位置和内含元素的个数。试写出此环形队列队满的条件,并设计相应入队和出队的算法。(读程序,根据题目填空完善...

    华为SEQ平台功能使用指导书.docx

    SEQ Analyst(全称为Service & Experience Quality Analyst)作为客户体验管理使能平台,以数据分析存储平台和NetProbe被动探针为核心,可集成华为和第三方多种数据源,关联运营商网络中从无线、传输、核心网到应用等...

    Python如何实现动态数组

    不知道你发现没有,这些类都有一个很明显的共性,都可以用来保存多个数据元素,最主要的功能是:每个类都支持下标(索引)访问该序列的元素,比如使用语法 Seq[i]。其实上面每个类都是使用 数组 这种简单的数据结构...

    基于 Pytorch 的 Seq2seq 学习框架工具,包含中文文本生成、诗词曲联生成、歌词生成、现代诗生成、问题扩增、自动摘要

    中文文本生成,诗词曲联生成、歌词生成、现代诗生成、问题扩增、自动摘要、文言文翻译、问题相似度模型、作文模型、新闻评论生成、商品文案生成、商品评价生成、小说生成、生成式问答、中英机器翻译、标签生成、文本...

    大数据课程作业-基于Seq2Seq的故事文本生成python源码+项目说明文档.zip

    本次作业本质上是文本生成的任务,序列到序列[1]模型是文本生成领域比较常用的一个算法,也是课程提供的参考文献[2]中使用的方法,采取了编码器-解码器的架构,用编码器编码输入,解码器则用来产生输出,两个模块...

    Linux seq命令的使用详解

    seq命令用于产生整数序列。 02. 命令格式 用法: seq [选项]... 尾数 seq [选项]... 首数 尾数 seq [选项]... 首数 增量 尾数 03. 常用选项 以指定增量从首数开始打印数字到尾数。 -f, --format=格式 使用...

Global site tag (gtag.js) - Google Analytics