我在网上搜索但我找不到任何可以回答我问题的内容。
我在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
)。
我希望我已经清楚地解释了我的问题,如果只是问我,我会尝试更好地解释。
答案 0 :(得分:4)
接受文件名参数的大多数编写良好的shell命令通常也接受文件名参数列表。例如cat file
或cat file1 file2
等
如果您尝试使用的程序不支持此功能,并且无法轻松修复,则可能是您的操作系统或shell使/dev/stdin
可用作伪文件。
cat file1 file2 | java -mumble -crash -burn FASTQ=/dev/stdin
有些shell也有进程替换,它们(通常)将调用程序视为包含进程替换在标准输出上产生的任何内容的单个文件。
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