Python中文
首页
教程
问答
标签
搜索
登录
注册
从bash分裂的流是否可以转换到其他语言?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我所说的分流是指:</p> <ol> <li>通过第一个函数动态过滤流内容</li> <li>流的一部分由第二个函数处理</li> <li>流的其余部分由第三个函数处理</li> <li>流从未存储(动态)</li> </ol> <p>一个例子有时比一个冗长的解释要好。此命令行使用<a href="http://en.wikipedia.org/wiki/Tee_%28command%29" rel="nofollow noreferrer">^{<cd1>}</a>和<a href="http://en.wikipedia.org/wiki/Process_substitution" rel="nofollow noreferrer">process substitution</a>拆分流:</p> <pre><code>$> cut -f2 file | tee >( grep "AB" | sort | ... ) | grep -v "AB" | tr A B | ... </code></pre> <p>在本例中,流被分成两部分:包含<code>"AB"</code>的行和其余的行:</p> ^{pr2}$ <p>但是我不喜欢这种流分割技术,因为流首先被复制(通过<code>tee</code>),然后被过滤两次(通过<code>grep</code>和<code>grep -v</code>)。在</p> <p>因此,我想知道像<em>流分割</em>这样的东西是否在其他语言中可用,如<a href="/questions/tagged/perl" class="post-tag" title="show questions tagged 'perl'" rel="tag">perl</a>,<a href="/questions/tagged/python" class="post-tag" title="show questions tagged 'python'" rel="tag">python</a>,<a href="/questions/tagged/ruby" class="post-tag" title="show questions tagged 'ruby'" rel="tag">ruby</a>,<a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a>。。。在</p> <p>我在下面提供一个更复杂的例子。在</p> <hr/> <h2>复杂<code>bash</code>流拆分</h2> <p><code>counter.sh</code>将流分成三个部分(开始、中间和结束)。对于每个部分,再次分割流以计算符号<code><</code>、<code>|</code>和{<cd10>}的出现次数:</p> ^{3}$ <p>此脚本用于统计begin/middle/end部分中添加/更改/删除的行数。此脚本的输入是一个流:</p> <pre><code>$> cat file-A 1 22 3 4 5 6 77 8 $> cat file-B 22 3 4 42 6 77 8 99 $> diff --side-by-side file-A file-B | egrep -1 '<|\||>' | ./counter.sh del at begin: 1 add at begin: 0 chg at begin: 0 del at end: 0 add at end: 1 chg at end: 0 del in middle: 0 add in middle: 0 chg in middle: 1 </code></pre> <p>如何在其他编程语言中有效地实现这样的<code>counter.sh</code>,而不将数据存储在临时缓冲区中?在</p> <hr/> <h2>回答</h2> <p>正如<a href="https://stackoverflow.com/users/126214">Lennart Regebro</a>所指出的,我在想这个问题。当然,所有这些语言都能够按照<a href="https://stackoverflow.com/a/19638354/938111">ysth</a>的回答来分割输入流。在伪代码中:</p> <pre><code>while input-stream { case (begin section) { case (symbol <) aB++ case (symbol |) cB++ case (symbol >) dB++ } case (middle section) { case (symbol <) aM++ case (symbol |) cM++ case (symbol >) dM++ } case (ending section) { case (symbol <) aE++ case (symbol |) cE++ case (symbol >) dE++ } } PrintResult (aB, cB, dB, aM, cM, dM, aE, cE, dE) </code></pre> <p><strong>结论:</strong>流分割在^{<cd12>/<code>perl</code>/<code>awk</code>/<code>C++</code>中比使用<a href="http://en.wikipedia.org/wiki/Tee_%28command%29" rel="nofollow noreferrer">^{<cd1>}</a>+<a href="http://en.wikipedia.org/wiki/Process_substitution" rel="nofollow noreferrer">process substitution</a>更好。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>Tee只是一个使用基本系统调用的C程序,您可以用任何提供对系统库的访问的语言来实现它。在</p> <p>谷歌搜索</p> <p>用我最喜欢的语言</p> <p>找到你需要的答案。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
将Pandas数据帧转换为PyTorch张量?
4 回答
将Pandas数据帧转换为scipy稀疏矩阵
4 回答
将Pandas数据帧转换为Spark Datafram时出现问题
7 回答
将pandas数据帧转换为spark DataFram时出错
2 回答
将Pandas数据帧转换为spark datafram时收到错误
4 回答
将Pandas数据帧转换为Spark数据帧
5 回答
将Pandas数据帧转换为Tensorflow数据
9 回答
将Pandas数据帧转换为tkinter obj
10 回答
将pandas数据帧转换为XML
2 回答
将Pandas数据帧转换为值sql语句
10 回答
将pandas数据帧转换为元组
6 回答
将pandas数据帧转换为元组列表
3 回答
将pandas数据帧转换为元组列表并删除所有pandas数据类型
8 回答
将pandas数据帧转换为具有头和数据类型的numpy数组
2 回答
将pandas数据帧转换为内存中的拼花地板,并将其加载到Python中的Hadoop中
6 回答
将pandas数据帧转换为内存中类似文件的对象?
10 回答
将Pandas数据帧转换为内存功能(&F)
3 回答
将pandas数据帧转换为列表列表
9 回答
将pandas数据帧转换为列表列表以输入到RNN
1 回答
将Pandas数据帧转换为单行DataFram
6 回答