我正在使用以下脚本。如下所示,当我拥有它的回声$f
时,它给出了正确的结果:
#/bin/bash
var="/home/"
while read p; do
f=$(echo $p | sed "s/${var}/\n/g")
f=${f%.sliced.bam}.fastq
echo $f
~/bin/samtools view $p | awk '{print "@"$1"n"$10"n+n"$11}' > $f
./run.sh $f ${f%.fastq}
rm ${f%.sliced.bam}.fastq
done < $1
我从预期获得输出
test.fastq
但是awk > $f
创建的文件具有名称
?test.fastq
请注意,这里的总体目标是在具有绝对路径的文件中列出的每个文件上运行此循环,然后在本地写入(这是SED呼叫的目的)
)编辑:直接在命令行(无变量)上运行samtools | awk
行正确运行。
awk可能与您的问题有任何关系。外壳完全负责文件重定向,因此F中必须具有怪异的字符。
最有可能您发送到此脚本的任何内容都具有特殊的字符(例如,UTF字符,您的终端仅显示ASCII)。当您进行回声时,外壳不知道如何显示字符,可能只是将其显示为whitespace,当您通过LS发送(可能是在做诸如着色之类的事情)时,它以一种奇怪的方式结合并结束向上显示?
哦,等等...为什么要用SED将newline放入文件名中???那可能是您的问题...尝试:
sed "s/${var}//g"