0

以下是我的一些代码:

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 循环是“回显”输出;但是我希望将回显输出保存到某个文件中。我想在脚本中管理这个。我的意思可能是某事。喜欢:

`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

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

谢谢

4

3 回答 3

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

于 2011-11-28T18:39:54.003 回答
1

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

在您的脚本中也是echo多余的。代替

echo `cat ...` 

您可以使用

cat ...
于 2011-11-28T18:35:35.883 回答
0

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

或者,您可以

exec >output

之前for

于 2011-11-28T18:35:03.857 回答