如何在 shell 脚本中生成 .out 文件?

如何在 shell 脚本中生成 .out 文件?

我不知道如何表达这个问题,但基本上我一直在使用 shell 脚本来处理 sam 数据。这是 shell 脚本。

nano picard_SortandIndex_from_sam.sh

for A in *sam; do ls $A; picard SortSam I=$A O=$A".bam" SO=coordinate CREATE_INDEX=TRUE; done 

这是我运行的命令,对于所有已处理的 sam 文件,我只获得一个 .out 文件。

nohup sh picard_SortandIndex_from_sam.sh > picard_SortandIndex_from_sam5_26_21.out &

有没有办法在我的“picard_SortandIndex_from_sam.sh”脚本中生成 .out 文件,以便我可以为每个处理的 sam 文件生成一个摘要文件?我尝试将 > $A".out" 放在那里,但它不起作用......

非常感谢!

答案1

我想你正在寻找这个:

for A in *sam; do 
  ls "$A"
  picard SortSam I="$A" O="$A".bam SO=coordinate CREATE_INDEX=TRUE > "$A".out
done

或者,更有可能的是,您想要标准错误和标准输出,因此使用:

for A in *sam; do 
  ls "$A"
  picard SortSam I="$A" O="$A".bam SO=coordinate CREATE_INDEX=TRUE > "$A".out 2>&1
done

这将picard在每个 sam 文件上运行,并存储命令的输出 ( > "$A".out)2>&1文件中产生的任何错误 ( ) $A.out

最后一点,由于这会创建名为 等的文件foo.sam.bamfoo.sam.bam.bai您可能需要.sam从输出名称中删除 :

 for A in *sam; do 
  ls "$A"
  fileName=$(basename "$A" .sam)
  picard SortSam I="$A" O="$fileName".bam SO=coordinate CREATE_INDEX=TRUE > "$fileName".out 2>&1
done

这将创建foo.bamfromfoo.sam而不是foo.sam.bam.

相关内容