2017-12-02 154 views
0

我有我希望能转换成一个for循环下面简单的代码:奇怪的回声行为瓦尔

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 

这是正常的。然而,当我与一个取代最后8行回声:

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

输出:

1 T0 4794 2938 9289 

不正常。我想知道有什么可能导致一些价值观的药房?

还有一次,我尝试了,我得到这个输出:

1 1ip1 T0_Gluco4794 2938 9289 

更为离奇的是一些文本融合,结果被截断。

+2

什么是所有的反斜杠? – chepner

+0

'; “在行尾没有任何意义。行尾的'\'告诉shell下一行是这个行的延续,但是'''本质上就是将行后面的行作为单独行。他们相互取消了!把它们都关掉。另外,你应该总是在变量引用周围放置双引号,如'grep -c“$ mut”'和'echo“$ i”'。我总是推荐[shellcheck.net](http://www.shellcheck.net)开始编写脚本,因为它会指出代码中的常见错误。 –

回答

3

$medium最后有一个CR。在提取变量后将其删除,或使用dos2unix对文件进行预处理。

+0

哎唷!从来没有想过。谢谢! –