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ループは出力を「エコー」します。ただし、エコー出力を何らかのファイルに保存したいと考えています。そして、この WITHIN スクリプトを管理したいと思います。私はおそらくsthを意味します。お気に入り:

`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 に答える