Bash 使用更多时产生神秘的冒号字符串
我试图在一组文件上运行一些生物信息学软件,但当我使用slurm提交时,该工具意外失败,显然是由于输入文件列表的交付不当。如果我在命令行上运行它,它似乎可以工作。我在下面替换了一些玩具文件名,因为实际名称很长。该工具称为RMAS,但该工具本身与我的问题无关 我使用.sbatch文件从命令行向集群提交作业,如下所示:Bash 使用更多时产生神秘的冒号字符串,bash,bioinformatics,slurm,Bash,Bioinformatics,Slurm,我试图在一组文件上运行一些生物信息学软件,但当我使用slurm提交时,该工具意外失败,显然是由于输入文件列表的交付不当。如果我在命令行上运行它,它似乎可以工作。我在下面替换了一些玩具文件名,因为实际名称很长。该工具称为RMAS,但该工具本身与我的问题无关 我使用.sbatch文件从命令行向集群提交作业,如下所示: sbatch job.sbatch group1.txt group2.txt 其中,两个文本文件包含以逗号分隔的数据文件列表。在.sbatch文件中,我将变量传递给生物信息学工具,
sbatch job.sbatch group1.txt group2.txt
其中,两个文本文件包含以逗号分隔的数据文件列表。在.sbatch文件中,我将变量传递给生物信息学工具,如下所示:
#!/bin/bash
#SBATCH --time=00:00:20
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH -o ./o.%j
#SBATCH --err ./e.%j
#SBATCH --account=owner-guest
#SBATCH --partition=server-guest
bioinfotool.py -arg1 `more group1.txt` -arg2 `more group2.txt`
我这样做是因为生物信息学工具显然无法直接解析文本文件
然而,它仍然不起作用,我认为这是由于我使用了backticks和more命令。我尝试通过添加echo语句进行调试
echo `more group1.txt`
输出应该是
sample1.bam,sample2.bam,sample3.bam
然而,实际输出是
:::::::::::::: group1.txt :::::::::::::: sample1.bam,sample2.bam,sample3.bam
因此,在我看来,这个莫名其妙的逗号字符串+文件名+逗号字符串在传递给生物信息学工具之前,就被预先添加到了我的文件列表中
在谷歌上搜索诸如“逗号串”+slurm之类的东西都是徒劳的,所以我不得不提出我自己的问题
这些逗号是从哪里来的?有没有更好的方法从txt文件中提取文件名字符串
谢谢
编辑:使用“cat”而不是“more”可以解决问题
more
是一个交互式程序,您看到的冒号很可能是冒号more
用来表示需要用户输入的冒号
如果您只想转储文件内容,cat
是您所需要的:
bioinfotool.py -arg1 `cat group1.txt` -arg2 `cat group2.txt`
您也可以直接从终端运行此命令,cat group1.txt
,以查看您得到的结果
注意:在像Bash这样的Bourne shell中,您可以`$(cat group1.txt)而不是使用backticks,这允许嵌套和其他一些选项,但在您的用例中这不重要。感谢您的澄清。我忘记了
more
的交互功能,因为我的文本文件只有几行。知道为什么这只发生在slurm上下文中而不是从命令行中吗?@user74117没问题,欢迎您。请注意,这样就不需要感谢您的评论,但a+1(向上箭头)总是很受欢迎的。