LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: jiazhengw

多发发一些有意思的题做做呀![+sed/awk/regex练习]

[复制链接]
发表于 2006-3-3 14:47:23 | 显示全部楼层
just want to let more people have chance to think about it.
回复 支持 反对

使用道具 举报

发表于 2006-3-3 18:37:38 | 显示全部楼层
这个看似很简单
以前做过,现在年纪大了,记性差了,忘记了,要喝脑白金了.........
回复 支持 反对

使用道具 举报

发表于 2006-3-3 19:17:20 | 显示全部楼层
Post by shizi4838
这个帖子真不错,我分析大家的程序能学到好多东西,我可以看出来yongjian兄和Johnny兄都是写程序的好手,以后还望多多指教.

:p


抬举了,shizi兄,我觉得最主要是大家能互相学习,但是我确实不知道为什么我这个机器上没问题,:ask

另外getline如果读到文件尾,确实返回的是0,man上面是这样写的,不过还希望shizi兄指教,如果我说错了,呵呵
回复 支持 反对

使用道具 举报

发表于 2006-3-3 19:38:55 | 显示全部楼层
Post by shizi4838
恩,现在没有那个死循环的问题了,但输出的结尾多了个

fdisk:

嘿嘿,以前的那个到底是不是死循环啊?


是末尾的空行,我把程序又改了一下,在大家的帮助下,让它更健全一点,希望yongjian兄和shizi兄给予点评



  1. function getcmd() {
  2.         while (getline title < "command") {
  3.                 if (title != "") break
  4.         }
  5. }

  6. BEGIN { getcmd(); if (title != "")  print title":" }

  7. {

  8. if ($0 == "") {
  9.         while (getline) {
  10.                 if ($0 != "") {
  11.                         getcmd()
  12.                         if (title != "") print "\n\n"title":"
  13.                         break
  14.                 }
  15.         }
  16. }

  17. for (i=1;i<=NF;i++) printf "%s ",$i

  18. }

  19. END { print "" }

复制代码
回复 支持 反对

使用道具 举报

发表于 2006-3-3 20:16:50 | 显示全部楼层
小弟感觉一个字,难,还没学到家,继续努力!
回复 支持 反对

使用道具 举报

发表于 2006-3-4 01:13:46 | 显示全部楼层
Post by shizi4838
晕 我输错了 请斑竹试试这个命令
$./sort.b second |sed '$d' | ./sort.a
我把两个文件的名字写反了.
:sorry

looks good now but still have the last blank line.
回复 支持 反对

使用道具 举报

发表于 2006-3-4 01:45:44 | 显示全部楼层
Post by shizi4838
恩,现在没有那个死循环的问题了,但输出的结尾多了个

fdisk:

嘿嘿,以前的那个到底是不是死循环啊?

I believe it is. getline returns 0 at EOF and that while loop condition will always true.
回复 支持 反对

使用道具 举报

发表于 2006-3-4 01:50:32 | 显示全部楼层
Post by johnny_jiang
是末尾的空行,我把程序又改了一下,在大家的帮助下,让它更健全一点,希望yongjian兄和shizi兄给予点评



  1. function getcmd() {
  2.         while (getline title < "command") {
  3.                 if (title != "") break
  4.         }
  5. }

  6. BEGIN { getcmd(); if (title != "")  print title":" }

  7. {

  8. if ($0 == "") {
  9.         while (getline) {
  10.                 if ($0 != "") {
  11.                         getcmd()
  12.                         if (title != "") print "\n\n"title":"
  13.                         break
  14.                 }
  15.         }
  16. }

  17. for (i=1;i<=NF;i++) printf "%s ",$i

  18. }

  19. END { print "" }

复制代码

I still see the last blank line though...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-5 14:01:01 | 显示全部楼层
Post by yongjian
提醒一下,前面的习题一有新注释,主要是paste到网页上的时候第二个文件的最后的空行都没有了,请自己在末尾加上一些空行。



yongjian版主的题就是不一样,你的程序我要好好研究下。一下子可是看不懂的!
好长时间没有来啦,工作太忙,没办法呀,得先将肚子填饱了才能有力气灌水呀,呵呵
回复 支持 反对

使用道具 举报

发表于 2006-3-5 22:05:15 | 显示全部楼层
Post by yongjian
I still see the last blank line though...


?是吗,yongjian兄是指最后会有空行,奇怪了,我把两个文件开始和末尾都加了很多空行,但是输出结果是好得,在不同得机器上果然不一样。郁闷ing...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表