免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3057 | 回复: 16
打印 上一主题 下一主题

[文本处理] 管道/重定向问题:怎么让一个输入给多个命令使用? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-18 14:00 |只看该作者 |倒序浏览
有一个很大的gzip文件(a.gz),有3个针对这个文件的处理脚本(a.pl,b.pl,c.pl),处于效率上的考虑,能不能只读一次文件,就做这3个处理?
类似下面这样:
gzip -dc a.gz | a.pl; b.pl; c.pl

另,能不能类似下面这样重定向输出?
gzip -dc a.gz | a.pl > a.out; b.pl > b.out ; c.pl > c.out

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
2 [报告]
发表于 2014-06-18 14:26 |只看该作者
你可以把三个处理脚本合成一个

论坛徽章:
0
3 [报告]
发表于 2014-06-18 14:30 |只看该作者
这是总公司做的设计,没法改。
这个问题困扰我很久了。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
4 [报告]
发表于 2014-06-18 14:35 |只看该作者
回复 3# ouiki


    那就先把gzip的输出用文件保存,其它命令再对文件进行处理

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2014-06-18 14:35 来自手机 |只看该作者
本帖最后由 jason680 于 2014-06-18 14:43 编辑

X-Y problem?
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4118053

论坛徽章:
0
6 [报告]
发表于 2014-06-18 14:50 |只看该作者
本帖最后由 ouiki 于 2014-06-18 14:55 编辑
关阴月飞 发表于 2014-06-18 14:35
回复 3# ouiki

压缩文件挺大的,硬盘又不是特别合适,我想尽量避免这么做吧。

jason680 发表于 2014-06-18 14:35
X-Y problem?
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4118053

谢谢你的提醒,我把我的需求仔细讲一下。

上面人做的设计,没法改。
对压缩文件 a.gz 做三个处理,分别是:
(比方说a.gz的格式是:
a  2
b  3
a  5
c  1)
1. a.pl: 如果第一列是a,累计第二列的和
2. b.pl:  如果第一列是b,累计第二列的和
3. c.pl:  如果第一列是c,累计第二列的和
(实际情况要复杂一些,大体上就是这么回事)

现在的做法是:
gzip -dc a.gz | a.pl > a.out
gzip -dc a.gz | b.pl > b.out
gzip -dc a.gz | c.pl > c.out
很明显,一遍循环可以做完的事,偏分三遍来做,由于a.gz本身很大,所以效率惨不忍睹。
这才有了主贴里的问题。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2014-06-18 15:45 |只看该作者
本帖最后由 jason680 于 2014-06-18 15:51 编辑

回复 6# ouiki

摩滴一次一人

你要三人...
1. 三人三台摩滴(a.pl, b.pl, c.pl)
2. 打滴一次(x.pl)
   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
8 [报告]
发表于 2014-06-18 15:49 |只看该作者
兄弟, 我有个建议, 你可以试试.

因为你的 a.pl b.pl c.pl 是处理文件, 输出到了标准输出. 那是不是可以这样, 稍稍修改一下, 就是把 正常的输出, 转到 STDERR, 然后, 把STDIN直接转发到 STDOUT.

这样, 你就可以 象你说的一样, gzip -dc a.gz | a.pl 2> a.out | b.pl 2>b.out | c.pl 2> c.out > /dev/null


这样的修改不需要修改原来的逻辑. 只修改了 输出. 应该不要紧吧.

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
9 [报告]
发表于 2014-06-18 15:57 |只看该作者
回复 8# q1208c

>>因为你的 a.pl b.pl c.pl 是处理文件, 输出到了标准输出. 那是不是可以这样, 稍稍修改一下, 就是把 正常的输出, 转到 STDERR, 然后, 把STDIN直接转发到 STDOUT.
   
you need modify a.pl, b.pl, and c.pl ....

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
10 [报告]
发表于 2014-06-18 16:06 |只看该作者
回复 9# jason680

如果这些文件实在不能改, 能不能加个 壳 呢?

aa.pl bb.pl cc.pl 这样
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP