我想在下面命令中的文件中输入一个变量,这可能吗?
我想用程序bedtools getfasta生成一些FASTA文件。通常,我首先使用下面的awk到bedtools sort命令对输入文件进行排序。然后输出通过管道传输到输出文件中。这个输出文件将遵循-bed标志在bedtools getfasta中,这样我就可以创建我需要的FASTA文件。
awk '{if ($2>$3)print $1,$3,$2,".",".","-";else print $1,$2,$3,".",".","+";}' OFS='\t' Infile.bed |
awk '{a=$2-1;print $1,a,$3,$4,$5,$6;}' OFS='\t' |
bedtools sort > OrderedFile.bed
bedtools getfasta -s -fi Infile.fasta -bed OrderedFile.bed -fo Outfile.fasta但是,我有很多文件想要使用bedtools getfasta。我希望通过将初始OrderedFile.bed命令的输出设置为变量来避免创建附加的awk文件(参见下面)
swapped=$(awk '{if ($2>$3)print $1,$3,$2,".",".","-";else print $1,$2,$3,".",".","+";}' OFS='\t' Infile.bed | awk '{a=$2-1;print $1,a,$3,$4,$5,$6;}' OFS='\t' | bedtools sort) 这是非常好的工作:
echo "${swapped}"
HEADING_1 4 12 . . +
HEADING_2 4 12 . . -当我在bedtools getfasta命令中使用变量时,不会生成任何输出。是否有一种方法可以像文件一样读取变量?我试过以下几种方法,但仍然不起作用:
bedtools getfasta -s -fi Infile.fasta -bed "${swapped}" -fo Outfile.fastabedtools getfasta -s -fi Infile.fasta -bed <(echo "${swapped}") -fo Outfile.fastabedtools getfasta -s -fi Infile.fasta -bed <(<<< "${swapped}") -fo Outfile.fasta基本上,我可以用一个变量代替一个文件作为命令的参数吗?
我希望这是有意义的
谢谢,
杰米
发布于 2020-12-17 16:20:43
如果您在测试套件中查找getfasta命令,当它希望从stdin读取床输入时,您将看到它将单词stdin作为文件名传递给它。例如:
LINES=$(echo $'chr1\t1\t10‘$BT getfasta -fi t.fa -bed stdin -fo -stdin 'END{ print NR }')
所以,我们只需要在你的脚本中做同样的事情:
bedtools getfasta -s -fi Infile.fasta -bed stdin -fo Outfile.fasta <<<"$swapped"顺便说一句--在大多数情况下,你的第二次尝试会奏效:
bedtools getfasta -s -fi Infile.fasta -bed <(echo "${swapped}") -fo Outfile.fasta将...insofar作为<(...)表达式替换为一个文件名,从该文件名可以读取手头的输出。(这里有一些警告:它通常通过一个/dev/fd链接,所以除了默认的stdin、stdout和stderr之外,任何关闭文件描述符的程序都无法从给定的内容中读取;而且,如果该文件名是FIFO的结束,任何需要在输入中查找、多次读取、在读取之前检查其大小等的程序都不能工作)。
https://stackoverflow.com/questions/65344110
复制相似问题