2017-12-02 9 views
0

私は、forループに変換するために期待しています次の簡単なコードを持っている:奇妙なエコーの挙動はvarsの

i="1"; \ 
plate="$(grep -P "^${i}" SampleIDs-Nov9-gyrA_S1-2.tab | cut -f 2)"; \ 
plateid="$(grep -P "^${i}" SampleIDs-Nov9-gyrA_S1-2.tab | cut -f 3)"; \ 
strain="$(grep -P "^${i}" SampleIDs-Nov9-gyrA_S1-2.tab | cut -f 4)"; \ 
replicate="$(grep -P "^${i}" SampleIDs-Nov9-gyrA_S1-2.tab | cut -f 5)"; \ 
timepoint="$(grep -P "^${i}" SampleIDs-Nov9-gyrA_S1-2.tab | cut -f 6)"; \ 
medium="$(grep -P "^${i}" SampleIDs-Nov9-gyrA_S1-2.tab | cut -f 7)"; \ 
total="$(awk -F'\t' 'BEGIN{n=0}{ n++ }END{print n/4}' ../trial1_merged_dir/${i}.extendedFrags.fastq)"; \ 

mut="$(grep -P "^${strain}" mutants-short.unix.txt | awk '{print toupper($2)}')"; \ 
wt="$(grep -P "^${strain}" mutants-short.unix.txt | awk '{print toupper($3)}')"; \ 

mutc="$(grep -c $mut ../trial1_merged_dir/${i}.extendedFrags.fastq)"; \ 
wtc="$(grep -c $wt ../trial1_merged_dir/${i}.extendedFrags.fastq)"; \ 

echo $i; \ 
echo $strain; \ 
echo $medium; \ 
echo $replicate; \ 
echo $timepoint; \ 
echo $wtc; \ 
echo $mutc; \ 
echo $total; \ 

出力:

1 
cip1 
M9_Glucose 
1 
T0 
4794 
2938 
9289 

これをは普通。しかし、私は1つでエコーの最後の8行を交換するとき:

echo "$strain $i $medium $replicate $timepoint $wtc $mutc $total"; \ 

出力:正常ではない

1 T0 4794 2938 9289 

を。私は何が薬局にいくつかの価値を引き起こす可能性があるのだろうか?

私はこの出力を得た私はそれを試してみました別の時間:

1 1ip1 T0_Gluco4794 2938 9289 

さらに奇妙ないくつかのテキストが融合し、切り捨てられてしまったよう。

+2

すべてのバックスラッシュは何ですか? – chepner

+0

'; \ '行末には意味がありません。行末の '\'は、次の行がこの行の続きであることをシェルに伝えますが、 ';'は本質的に、後に続く行を別の行として扱うことができます。彼らはお互いをキャンセルします!ちょうどそれらの両方を離れる。また、 'grep -c" $ mut "'と 'echo" $ i "'のように、ほとんどの場合、変数参照を二重引用符で囲むべきです。私はあなたのコードによくある間違いを指摘してくれるので、スクリプト作成者には常に[shellcheck.net](http://www.shellcheck.net)を勧めます。 –

答えて

3

$mediumは、最後にCRを有する。変数を抽出した後に削除するか、dos2unixでファイルを前処理してください。

+0

おっと!決して私の心を越えたことはありません。ありがとう! –