繁体   English   中英

如何在Linux命令行中将更多输入指定为单个输入?

[英]How to specify more inputs as a single input in Linux command-line?

我在网上搜索,但没有找到任何可以回答我问题的信息。

我在Ubuntu Linux中使用Java工具,通过bash命令调用它; 此工具有两个用于两个不同输入文件的路径:

java -Xmx8G -jar picard.jar FastqToSam \
FASTQ=6484_snippet_1.fastq \ #first read file of pair
FASTQ2=6484_snippet_2.fastq \ #second read file of pair
[...]

例如,我要执行的操作不是指定单个FASTQ的路径,而是指定两个不同文件的路径。

因此,我希望不执行cat file1 file2 > File并将File用作FASTQ输入,而是希望立即执行此操作并即时创建File ,而无需将其保存在文件系统中(发生在命令cat file1 file2 > File )。

我希望我已经清楚地解释了我的问题,以防万一只是问我,我会尽力解释得更好。

大多数接受文件名参数的编写良好的Shell命令通常也接受文件名参数的列表。 cat filecat file1 file2等。

如果您尝试使用的程序不支持此功能,并且无法轻松修复,则可能是您的操作系统或外壳程序将/dev/stdin用作伪文件。

cat file1 file2 | java -mumble -crash -burn FASTQ=/dev/stdin

一些外壳程序还具有进程替换,(通常)将其视为调用文件,就像单个文件一样,其中包含进程替换在标准输出上产生的所有内容。

java -mumble -crash -burn FASTQ=<(cat file1 file2) FASTQ2=<(cat file3 file4)

如果上述两种方法都不起作用,那么使用临时文件并在完成后将其删除的简单shell脚本是一种经过实践检验的真正解决方案。

#!/bin/sh
: ${4?Need four file name arguments, will process them pairwise}
t=$(mktemp -d -t fastqtwoness.XXXXXXX) || exit
trap 'rm -rf $t' EXIT HUP INT TERM  # remove in case of failure or when done
cat "$1" "$2" >$t/1.fastq
cat "$3" "$4" >$t/2.fastq
exec java -mumble -crash -burn FASTQ=$t/1.fastq FASTQ2=$t/2.fastq

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM