Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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
Linux GNU并行|管道命令_Linux_Greenplum_Gnu Parallel - Fatal编程技术网

Linux GNU并行|管道命令

Linux GNU并行|管道命令,linux,greenplum,gnu-parallel,Linux,Greenplum,Gnu Parallel,我在使用GNUparallel方面是个新手,在使用GNUparallel运行下面的命令时需要您的建议: /home/admin/Gfinal/decoder/decdr.pl --gh --w14b /data/tmp/KRX12/a.bin | perl /home/admin/decout/decoder/flow.pl >> /data/tmp/decodedgfile/out_1.txt 我将在一个文件列表(.bin)上运行这个命令,那么使用GNUparallel实现这

我在使用GNU
parallel
方面是个新手,在使用GNU
parallel
运行下面的命令时需要您的建议:

/home/admin/Gfinal/decoder/decdr.pl --gh --w14b /data/tmp/KRX12/a.bin | 
perl  /home/admin/decout/decoder/flow.pl >> /data/tmp/decodedgfile/out_1.txt
我将在一个文件列表(
.bin
)上运行这个命令,那么使用GNU
parallel
实现这一点的最佳(最快)方法是什么呢?注意,命令的第一部分(
/home/admin/Gfinal/decoder/decdr.pl--gh--w14b
)的输出非常大(>2GB)


任何帮助都将不胜感激。

以下是一些gnu parallel/parallel的精彩视频

参考号

这里是GNU网站上的一个链接,用于获取特定于平台的信息

参考号

“多输入源

GNU parallel可以接受命令行上给定的多个输入源 并行然后生成输入源的所有组合:

平行回波:A B C::D E F

输出(顺序可能不同):

D

E

F

B-D

B E

输入源可以是以下文件:

参考号

关于管道

管道容量 管道的容量有限。如果管道已满,则写入(2) 将阻塞或失败,具体取决于是否设置了O_非阻塞标志 (见下文)。不同的实现对 管道容量。应用程序不应依赖于特定的 容量:应用程序的设计应使读取过程 在数据可用时立即使用数据,以便写入过程 不会保持阻塞状态

  In Linux versions before 2.6.11, the capacity of a pipe was the same
   as the system page size (e.g., 4096 bytes on i386).  Since Linux
   2.6.11, the pipe capacity is 65536 bytes.  Since Linux 2.6.35, the
   default pipe capacity is 65536 bytes, but the capacity can be queried
   and set using the fcntl(2) F_GETPIPE_SZ and F_SETPIPE_SZ operations.
   See fcntl(2) for more information.
烟斗 POSIX.1说小于PIPE_BUF字节的写(2)必须是 原子:将输出数据作为连续数据写入管道 序列。超过PIPE_BUF字节的写入可能是非原子的: 内核可以将数据与其他进程写入的数据交错。 POSIX.1要求PIPE_BUF至少为512字节, PIPE_BUF是4096字节。)精确的语义取决于 文件描述符为非阻塞(O_NONBLOCK),是否存在 管道中有多个写入程序,在n上是要写入的字节数 书面:

参考号

有关更多信息,您可以查看fcntlF_GETPIPE_SZ和F_SETPIPE_SZ操作

参考号

所有最好的

都能做到这一点:

parallel /home/admin/Gfinal/decoder/decdr.pl --gh --w14b {} '|' perl  /home/admin/decout/decoder/flow.pl >> /data/tmp/decodedgfile/out_1.txt ::: /data/tmp/KRX12/*.bin
(如果
flow.pl
的输出超出磁盘I/O的处理能力,请尝试
parallel--compress

或者可能:

parallel /home/admin/Gfinal/decoder/decdr.pl --gh --w14b {} '|' perl  /home/admin/decout/decoder/flow.pl '>>' /data/tmp/decodedgfile/out_{#}.txt ::: /data/tmp/KRX12/*.bin
这取决于您想要的是单个输出文件还是每个输入文件一个


还要花一个小时浏览教程。你的命令行会喜欢你的。
man parallel_教程

非常感谢你的回答。非常感谢你的工作。还有一个问题…是使用--pipe after(/home/admin/Gfinal/decoder/decdr.pl--gh--w14b)会使过程更快吗?不理解。但尝试一下并测量一下。
parallel /home/admin/Gfinal/decoder/decdr.pl --gh --w14b {} '|' perl  /home/admin/decout/decoder/flow.pl '>>' /data/tmp/decodedgfile/out_{#}.txt ::: /data/tmp/KRX12/*.bin