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>你提到的任何一种语言都非常适合这一点。在</p> <p>在Perl中,我不会使用diff命令,而是在原始文件上使用<a href="http://p3rl.org/Algorithm%3a%3aDiff" rel="nofollow">Algorithm::Diff</a>。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
拆分()错误:列表索引超出范围
3 回答
拆分(分解)数据帧字符串条目以分隔行
6 回答
拆分(分解)数据帧字符串条目以分隔行。多列
2 回答
拆分/提取系列索引中的字符串并作为DataFram展开
2 回答
拆分/标识字符串末尾的数字,该数字没有固定的字符数
5 回答
拆分2列CSV并保存到不同的文件
9 回答
拆分aconftest.py分成几个较小的conftestlike部分
7 回答
拆分apyspark.sql基于一列将数据帧放入多个表中
3 回答
拆分ascii/unicode字符串
4 回答
拆分a稀疏稀疏矩阵进入列车和tes
3 回答
拆分B的可能性
10 回答
拆分char上的查询字符串以获取不同的参数;Python:
10 回答
拆分csv fi中显示的图表
8 回答
拆分csv fi的列
10 回答
拆分CSV-fi需要Regex帮助
6 回答
拆分csv(和多选字段)以获取要导出到xlsx工作表的字段计数,我会不断获取“[blank]值和nan
1 回答
拆分CSV文件时出现标题问题[Python 3]
6 回答
拆分Cython代码后无法转换为Python对象
2 回答
拆分Dataframe,让线程处理每个部分,然后合并Datafram
4 回答
拆分dataframe列并删除额外变量
1 回答