当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 13 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [已基本解决]管道问题还是...?
帖子发表于 : 2008-08-11 22:22 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
代码:
for i in `seq 10`;do echo "xxx (" $i"%) yyy"; sleep 0.1;done
这个是逐个输出的
代码:
for i in `seq 10`;do echo "xxx (" $i"%) yyy"; sleep 0.1;done |cut -d " " -f 3
这个还是逐个输出的
代码:
for i in `seq 10`;do echo "xxx (" $i"%) yyy"; sleep 0.1;done |cut -d " " -f 3 | cut -d "%" -f 1
为什么这个就不是了呢?这个是 命令执行完以后,一次性输出?为什么?

怀疑是管道问题,多个管道就会缓存,但是
代码:
for i in `seq 10`;do echo "xxx (" $i"%) yyy"; sleep 0.1;done | tee | tee | cut -d " " -f 3
这又是逐行输出的,用了不止一个管道....

谁能在不改变前面for结构的情况下,逐行输出那些数字?


_________________
关注我的blog: ε==3


最后由 bones7456 编辑于 2008-08-12 12:04,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-08-11 22:25 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
PS:
代码:
for i in `seq 10`;do echo "xxx (" $i"%) yyy"; sleep 0.1;done | awk -F '[ %]+' '{print $3}'

只有1个管道也有问题,看来不是管道的问题了?
是程序没有做 fflush ?


_________________
关注我的blog: ε==3


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-08-12 10:20 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
新进展:
安装 gawk 之后.
代码:
for i in `seq 10`;do echo "xxx (" $i"%) yyy"; sleep 0.1;done | gawk -F '[ %]+' '{print $3}'

是逐行输出的,但是两个管道又不行了:
代码:
for i in `seq 10`;do echo "xxx (" $i"%) yyy"; sleep 0.1;done | gawk -F '[ %]+' '{print $3}' | gawk '{print $0}'

这个又是一次性输出了,郁闷中... :oops:


_________________
关注我的blog: ε==3


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-08-12 10:33 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
晕乎哉,大不了先输一个临时文件里面再读出来呗,搞的好麻烦啊。


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-08-12 10:36 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
xiooli 写道:
晕乎哉,大不了先输一个临时文件里面再读出来呗,搞的好麻烦啊。


这和临时文件没关系,我是要用 zenity 显示进度的:

代码:
for i in `seq 100`;do echo $i; sleep 0.1;done | zenity --progress --title "111" --text "22222" --percentage=0 --auto-close --width=500

这样是可以的

代码:
for i in `seq 100`;do echo "xxx (" $i"%) yyy"; sleep 0.1;done | gawk -F '[ %]+' '{print $3}' | zenity --progress --title "111" --text "22222" --percentage=0 --auto-close --width=500

这样不会慢慢增加了,而是时间到了,再哗地一下,就完事了....


_________________
关注我的blog: ε==3


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-08-12 10:56 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
:for i in `seq 100`;do echo "$i"; sleep 0.1;done |zenity --progress --title "111" --text "22222" --percentage=0 --auto-close --width=500

这样是可以的,你中间那个echo为何要弄成那样啊,又看不见?


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-08-12 11:09 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
xiooli 写道:
:for i in `seq 100`;do echo "$i"; sleep 0.1;done |zenity --progress --title "111" --text "22222" --percentage=0 --auto-close --width=500

这样是可以的,你中间那个echo为何要弄成那样啊,又看不见?


不是我要把中间弄成那样啊,我前面那个for循环是模拟另一个程序的输出的啊.
其实就是 mencoder,输出的是类似这样的:
引用:
Pos: 3.6s 90f ( ??%) 0.00fps Trem: 0min 0mb A-V:0.023 [65:85]

我要把 ?? 取出来,给 zenity 用.


_________________
关注我的blog: ε==3


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-08-12 11:27 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
bones7456 写道:
xiooli 写道:
:for i in `seq 100`;do echo "$i"; sleep 0.1;done |zenity --progress --title "111" --text "22222" --percentage=0 --auto-close --width=500

这样是可以的,你中间那个echo为何要弄成那样啊,又看不见?


不是我要把中间弄成那样啊,我前面那个for循环是模拟另一个程序的输出的啊.
其实就是 mencoder,输出的是类似这样的:
引用:
Pos: 3.6s 90f ( ??%) 0.00fps Trem: 0min 0mb A-V:0.023 [65:85]

我要把 ?? 取出来,给 zenity 用.
z


这样是可以的:
代码:
for i in `seq 100`;do echo "xxx (" $i"%) yyy"; sleep 0.1;done |while read line;do echo $line |sed 's/^.*( //;s/%.*$//';done |zenity --progress --title "111"


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2008-08-12 12:04 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
xiooli 写道:
bones7456 写道:
xiooli 写道:
:for i in `seq 100`;do echo "$i"; sleep 0.1;done |zenity --progress --title "111" --text "22222" --percentage=0 --auto-close --width=500

这样是可以的,你中间那个echo为何要弄成那样啊,又看不见?


不是我要把中间弄成那样啊,我前面那个for循环是模拟另一个程序的输出的啊.
其实就是 mencoder,输出的是类似这样的:
引用:
Pos: 3.6s 90f ( ??%) 0.00fps Trem: 0min 0mb A-V:0.023 [65:85]

我要把 ?? 取出来,给 zenity 用.
z


这样是可以的:
代码:
for i in `seq 100`;do echo "xxx (" $i"%) yyy"; sleep 0.1;done |while read line;do echo $line |sed 's/^.*( //;s/%.*$//';done |zenity --progress --title "111"


高手啊~问题解决~
:em11 :em10

只是,管道的这个特性还是不知道原因,呵呵...


_________________
关注我的blog: ε==3


最后由 bones7456 编辑于 2008-08-12 13:14,总共编辑了 1 次

页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2008-08-12 12:08 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
:shock:

最后还是用sed... :lol:


_________________
HUNT Unfortunately No Talent...


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2008-08-12 12:09 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
HuntXu 写道:
:shock:

最后还是用sed... :lol:


关键不在于sed
而是使那堆管道每个只处理一行

for i in `seq 10`;do echo "xxx (" $i"%) yyy"; sleep 0.1;done | while read i ; do echo $i | cut -d " " -f 3 | cut -d "%" -f 1 ; done


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2008-08-12 12:16 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
没理解我的意思...我是先看到用gawk的,感叹一下不能轻易用牛刀而已... :lol:


_________________
HUNT Unfortunately No Talent...


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2008-08-12 13:11 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
哈哈,这样了以后,cut sed gawk mawk 都可以了...


_________________
关注我的blog: ε==3


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 13 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译