将echo保存为脚本中的输出

时间:2011-11-28 18:32:00

标签: bash echo fastq

以下是我的一些代码:

for((a=1;a<=8000000;a++))
do
  if (($a%4==0))
  then  
      b=`cat 101127_2_aa_1.fastq|head -$a|tail -1|sed 's/\(.\)B*$/\1/g'|wc -c`
      echo `cat 101127_2_aa_1.fastq|head -$(($a-3))|tail -1`
      echo `cat 101127_2_aa_1.fastq|head -$(($a-2))|tail -1|cut -c 1-$(($b-1))`
      echo `cat 101127_2_aa_1.fastq|head -$(($a-1))|tail -1`
      echo `cat 101127_2_aa_1.fastq|head -$a|tail -1|sed 's/\(.\)B*$/\1/g'`
  fi
done

这个if循环是“echo”输出;但是我希望将echo输出保存到某个文件中。我想管理这个WITHIN脚本。 我的意思是......像:

`for((a=1;a<=8000000;a++))
do
  if (($a%4==0))
  then  
      b=`cat 101127_2_aa_1.fastq|head -$a|tail -1|sed 's/\(.\)B*$/\1/g'|wc -c`
      echo `cat 101127_2_aa_1.fastq|head -$(($a-3))|tail -1`
      echo `cat 101127_2_aa_1.fastq|head -$(($a-2))|tail -1|cut -c 1-$(($b-1))`
      echo `cat 101127_2_aa_1.fastq|head -$(($a-1))|tail -1`
      echo `cat 101127_2_aa_1.fastq|head -$a|tail -1|sed 's/\(.\)B*$/\1/g'`
  fi
done` > output

但显然这不起作用;我要求在脚本中保存回声输出的正确方法。

THX

3 个答案:

答案 0 :(得分:3)

使用$(...)代替``。

总是一个好习惯
for((a=1;a<=8000000;a++))
do
  if (($a%4==0))
  then  
      b=$(cat 101127_2_aa_1.fastq|head -$a|tail -1|sed 's/\(.\)B*$/\1/g'|wc -c)
      echo $(cat 101127_2_aa_1.fastq|head -$(($a-3))|tail -1)
      echo $(cat 101127_2_aa_1.fastq|head -$(($a-2))|tail -1|cut -c 1-$(($b-1)))
      echo $(cat 101127_2_aa_1.fastq|head -$(($a-1))|tail -1)
      echo $(cat 101127_2_aa_1.fastq|head -$a|tail -1|sed 's/\(.\)B*$/\1/g')
  fi
done >> output

<强>更新

正如 @Sorpigal 建议的那样,当我们对cat

执行相同操作时,仍会使用head命令

答案 1 :(得分:1)

您可以将>> output附加到每个回显线。

此外,echo在您的脚本中是多余的。而不是

echo `cat ...` 

你可以使用

cat ...

答案 2 :(得分:0)

只需删除反引号并保持重定向。

或者你可以

exec >output

for

之前