Chinaunix

标题: 怎么去掉换行的多余空格 [打印本页]

作者: ruoknow    时间: 2013-11-28 01:54
标题: 怎么去掉换行的多余空格
  1. -->














  2. 天和一朋友吃饭,她带着她三岁左右的孩子。'>


  3. -->














  4. 知道深爱是什么感觉吗?——就像房间突然黑了,我不是去找灯而是去找他。'>


  5. -->

复制代码
就是把中间多余的换行空格去掉。挤压成一个段文字
作者: rdcwayx    时间: 2013-11-28 07:18
  1. grep -v "^ *$" infile
复制代码

作者: fire_001    时间: 2013-11-28 08:23
版主能帮我解几个shell编程题吗[b]回复 [url=forum.php?mod=redirect&goto=findpost&pid=&ptid=4113187]2#[/url] [color=Olive]rdcwayx[/color] [/b]


   
作者: 这个冬天不冷    时间: 2013-11-28 08:46

回复 3# fire_001

把问题贴出来啊。让大家都看看 ,在众版主的带领下群策群力,更好的发展cu shell板块


   
作者: fire_001    时间: 2013-11-28 08:57
本帖最后由 fire_001 于 2013-11-28 08:58 编辑

编写一个Shell,完成一个斐波那契数列, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...这个数列从第三项开始,每一项都等于前两项之和。
(1)要求定义递归函数
(2)数列项数N从文件读入
(3)数列结果存入另外文件。


   
作者: fire_001    时间: 2013-11-28 08:59
回复 4# 这个冬天不冷
...

   
作者: rdcwayx    时间: 2013-11-28 09:23
@fire_001
http://bbs.chinaunix.net/thread-3703152-1-1.html
http://my.oschina.net/StormX/blog/15419
作者: 这个冬天不冷    时间: 2013-11-28 09:44
本帖最后由 这个冬天不冷 于 2013-11-28 09:45 编辑
fire_001 发表于 2013-11-28 08:57
编写一个Shell,完成一个斐波那契数列, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...这个数列从第三 ...


我不敢写啊 ,shell变量注意点,尤其给函数传参数的时候注意是 全局还是 local 要不然 你就中了 fork炸弹了 哇咔咔

这是作业么,shell递归是个禁忌。用C语言多好啊
作者: fire_001    时间: 2013-11-28 09:51
回复 8# 这个冬天不冷
是作业,我刚学shell,有些基本的命令都不知道,可以帮我解一下吗?

   
作者: reyleon    时间: 2013-11-28 09:57
回复 5# fire_001
  1. [root@centos6-1 ~]# awk 'BEGIN{s=0;while(s<200){print s;s=s+n;n=s-n;if(!s)++s}}'  
  2. 0
  3. 1
  4. 1
  5. 2
  6. 3
  7. 5
  8. 8
  9. 13
  10. 21
  11. 34
  12. 55
  13. 89
  14. 144
  15. [root@centos6-1 ~]#
复制代码

作者: 这个冬天不冷    时间: 2013-11-28 10:52
本帖最后由 这个冬天不冷 于 2013-11-28 10:54 编辑
  1. #!/bin/bash

  2. f()
  3. {
  4.     local i=$1
  5.     if [ $i -eq 1 ] || [ $i -eq 2 ]
  6.     then
  7.         echo $i;
  8.     else
  9.         ((i--))
  10.         sum1=$(f $i)
  11.         ((i--))
  12.         sum2=$(f $i)
  13.         ((sum=sum1 + sum2))
  14.         echo $sum

  15.     fi

  16. }
  17. n=$(cat filename)
  18. f $n
复制代码
回复 9# fire_001
  1. [root@everIover ~]# cat filename
  2. 10
  3. 不知道这个数列项数N很大的时候会出现什么结果,毕竟不像C语言,shell有很多约束,具体 请大神解释下。。。我也不怎么懂
复制代码
  1. [root@everIover ~]# ./f.sh > res
  2. [root@everIover ~]# cat res
  3. 89
复制代码

作者: fire_001    时间: 2013-11-28 11:25
回复 11# 这个冬天不冷
你的意思好像理解错了,不是输出累加和,是输出数列,比如从文件读入的N是4,输出的是0 1 1 2

   
作者: 这个冬天不冷    时间: 2013-11-28 13:23
  1. #!/bin/bash

  2. f()
  3. {
  4.     local i=$1
  5.     if [ $i -eq 1 ] || [ $i -eq 2 ]
  6.     then
  7.         echo $i;
  8.     else
  9.         ((i--))
  10.         sum1=$(f $i)
  11.         ((i--))
  12.         sum2=$(f $i)
  13.         ((sum=sum1 + sum2))
  14.         echo $sum
  15.     fi

  16. }
  17. n=$(cat filename)

  18. >resfile#清空resfile

  19. for((j=1;j<=$n;j++))
  20. do
  21.     res=$(f $j)
  22.     echo -n "$res " >>resfile
  23. done
复制代码
回复 12# fire_001


   
作者: 这个冬天不冷    时间: 2013-11-28 14:00
  1. #!/bin/bash
  2. f()#定义求斐波那契数列的函数
  3. {
  4.     local i=$1 #$1是函数接受的第一个参数,以此类推 $2第二个。。。。
  5.     if [ $i -eq 1 ] || [ $i -eq 2 ] #判断是否传入的参数 是否等于1或者等于2,如果是直接就输出1
  6.     then
  7.         echo $i;
  8.     else
  9.         ((i--)) #i自减1,
  10.         sum1=$(f $i) #相当于  f(i-1)
  11.         ((i--)) #i再自减
  12.         sum2=$(f $i) #相当于f(i-2)
  13.         ((sum=sum1 + sum2)) #相当于sum = f(i-2)+f(i-1)
  14.         echo $sum #最后输出jieguo
  15.     fi

  16. }
  17. n=$(cat filename) # 从filenam中读取选项n,filename内容 10

  18. >resfile #做一个重定向,什么也没有重定向到文件resfile,目的清空这个文件,一面影响到最后的结果

  19. for((j=1;j<=$n;j++)) #循环1-n 每次把调用函数的结果输入到resfile
  20. do
  21.     res=$(f $j) #保存函数执行的结果到变量res
  22.     echo -n "$res " >>resfile #-n 选项表示不换行输出结果到resfile
  23. done
复制代码

作者: ruoknow    时间: 2013-11-28 17:12
回复 2# rdcwayx


    谢谢。好用




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2