LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1225|回复: 5

请教:重定向的问题

[复制链接]
发表于 2009-7-14 16:54:31 | 显示全部楼层 |阅读模式
想要在一个行数固定的文本文件中取指定的两行,文件test.txt内容如下
123
456
234
456
789
123
235
234

cat test.txt | tee >(sed -n '5p') >(sed -n '7p') >/dev/null

输出的内容是
235
789

但多运行几次这行命令输出内容会有规律的颠倒变成
789
235

想请教下原因和如何解决,烦请各位高手指点一二。
发表于 2009-7-15 02:39:15 | 显示全部楼层
sed -n '5p;7p;' test.txt
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-17 11:46:16 | 显示全部楼层
谢谢lastart,还想请教下
cat test.txt | tee >(sed -n '5p') >(sed -n '7p') >/dev/null
这条命令搜索论坛中说是可以并行处理,请问是这样吗?

另一问题是我尝试
cat test.txt | tee >(var1=`sed -n '5p'`) >(var2=`sed -n '7p'`) >/dev/null
echo $var1 $var2
给变量赋值后这样取变量的话值为空,请教下该如何解决呢?
回复 支持 反对

使用道具 举报

发表于 2009-7-19 02:59:53 | 显示全部楼层
管道确实可以认为是“同时”进行的。
管道相当于开子进程,
子进程里的变量不可能传出来。
这解释了你的第二个问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-19 11:03:38 | 显示全部楼层
谢谢lastart
第二个问题看来得想别的法子了,主要是有个文件要周期性的取些信息,文件比较大想要优化下性能,要不太占资源了。
回复 支持 反对

使用道具 举报

发表于 2009-7-19 17:07:52 | 显示全部楼层
不知道你为什么要这样写,感觉效率很低,不过这样可以达到你想要的效果:
  1. eval $(cat test.txt | tee >(echo a="'`sed -n '5p'`';") >(echo b="'`sed -n '7p'`';") >/dev/null)
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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