【发布时间】:2012-08-03 18:46:08
【问题描述】:
我目前在捕获反引号 shell 命令的输出时遇到了一个非常简单的问题。我很抱歉这个问题很简单。
我有一些排序数组 (@valid_runs),我知道包含连续的重复元素。我想使用反引号将此数组回显到 uniq。我想在一个数组中捕获 STDOUT。我尝试这样做。
@unique_valids = `echo '@valid_runs' | uniq`;
print @unique_valids;
这个打印语句没有产生任何结果。就此而言,这也不是。
@unique_valids = `echo '@valid_runs'`;
print @unique_valids;
我知道如何使用 uniq 和 echo。这对我来说似乎很奇怪。我认为这与 perl 数组有关,而不是正确使用这些命令。我在其他地方搜索了一下,所以请不要仅仅因为解决方案看起来微不足道而对我投反对票。再次感谢您的宝贵时间。
解决方案注意事项: 就处理 uniq 问题而言,TLP 的解决方案是最直接的。我相当灵活,因为所有回复都建议不要针对这个问题进行系统调用。如果 Perl 的 uniq 函数与 Unix 的 uniq 函数相同,那么数组应该保持排序状态。
如果您不关心排序结果,John Corbett 的解决方案效果很好。
【问题讨论】:
-
一个潜在问题:
@valid_runs的元素是否以换行符结尾?否则echo将只产生一行输出作为uniq的输入 -
您确定
@valid_runs不为空吗?这为我打印了一些东西:@x=(3,2,1);@y = `echo '@x'`;print @y; -
@user5402 我确定@valid 运行不为空。我确信每个条目在字符串的末尾都有一个换行符。你的例子有效。这很好;向我表明我并没有提出任何太疯狂的建议。这是@valid_runs 的sn-p:
/raid1/home/pharmacy/morguna/1experiments_copy/1experiments/test10-10/run36415 /raid1/home/pharmacy/morguna/1experiments_copy/1experiments/test10-10/run36415 /raid1/home/pharmacy/morguna/1experiments_copy/1experiments/test10-10/run36416 /raid1/home/pharmacy/morguna/1experiments_copy/1experiments/test10-10/run36416 -
有关您可能希望在 Perl 中处理数组的各种事情的讨论,例如获取两个数组之间的差异,请参阅 Perl 常见问题解答:perldoc.perl.org/perlfaq4.html#Data:-Arrays