Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ksh 如何重用标准输出而不将其保存到物理磁盘文件_Ksh - Fatal编程技术网

Ksh 如何重用标准输出而不将其保存到物理磁盘文件

Ksh 如何重用标准输出而不将其保存到物理磁盘文件,ksh,Ksh,我有一个for循环,如下所示: for inf from $filelist; do for ((i=0; i<imax; ++i)); do temp=`<command_1> $inf | <command_2>` eval set -A array -- $temp ... done ... done 性能有了一些改进,但没有我想要的那么多,可能是因为磁盘I/O也是性能瓶颈 只是想知道是否有办法保存命令\u 1的标准输出

我有一个for循环,如下所示:

for inf from $filelist; do
  for ((i=0; i<imax; ++i)); do
    temp=`<command_1> $inf | <command_2>`
    eval set -A array -- $temp
    ...
  done 
  ...
done
性能有了一些改进,但没有我想要的那么多,可能是因为磁盘I/O也是性能瓶颈

只是想知道是否有办法保存
命令\u 1
标准输出,这样我就可以在不将其保存到物理磁盘文件的情况下重用它?

不要在嵌套循环中使用管道 基于新的评论和对原始问题的另一种看法,我强烈建议不要在嵌套循环中使用管道处理大量数据。壳牌管道的效率很低,并且会产生大量的流程开销

看看最初的问题,这涉及到研究
command_1
command_2
的贡献,看看是否可以用另一种方法解决这个问题

也就是说:以下是原始答案:

在shell中,有两种存储数据的方法:在shell变量中或在文件中。您可以尝试将该文件存储在基于内存的文件系统中,如linux上的/dev/shm或Solaris中的tmpfs

您还可以分析
command_1
command_2
进行优化。
command\u 1
的输出中是否有
command\u 2
不需要的内容?试着在两者之间加一个过滤器

例如:

command_1 | awk '{ print $2 }' | command_2

(假设
command_2
只需要
command_1
的第2列输出。)

这实际上取决于command_2产生的数据量,以及它需要command_1提供的数据量。好主意,亨克!是的,在每个循环迭代中,只需要第i列。但是如何将这个
awk
语句嵌入for循环呢?我尝试了
command_1 | awk'{print$$I}'| command_2
(在for循环中),但不起作用。这里有什么建议吗?试试
。|awk-vi=$i'{print$i}'|…
。|削减-f$i |…
。但是,看起来您可以使用基于纯awk/perl/python/…的解决方案,而不需要所有的处理开销。
command_1 | awk '{ print $2 }' | command_2