我正在跑到一个“怪异的”“如果那么”的问题(或者我只是一个新手)。或者,我不完全理解指定语句的语义。
我想要做的是通过下面的表格(csv)阅读
/home/trotos/I16_1505_09.fastq.gz,34,hg19
/home/trotos/I16_1505_06.fastq.gz,34,hg19
/home/trotos/I16_1505_12.fastq.gz,40,hg19
/home/trotos/I15_1277_01.fastq.gz,42,gg5
/home/trotos/I15_1458_01.fastq.gz,42,gg5
/home/trotos/I15_1314_01.fastq.gz,36,gg5
/home/trotos/I15_1458_03.fastq.gz,36,gg5
然后使用每列的输入(按顺序)执行多个命令。 我正在使用的脚本(尚未完善),其中file是statedcsv
#!/bin/bash
shopt -s nullglob
file="$3"
human="$1"
mouse="$2"
while IFS=, read col1 col2 col3 ; do # the file need to be loaded at the end of the loop, check a done
echo $col1
echo $col2
echo $col3
for i in $col1; do
if [$col3="hg19"]
then
ref_genome=$human
echo "1"
echo $ref_genome
else
ref_genome=$mouse
echo "2"
echo $ref_genome
fi
echo $ref_genome
echo "....."
done
done < $file
命令如下
./test '/home/trotos/Downloads/chromosomes/hg19.fa' '/home/trotos/Downloads/chromosomes/gg5.fa.gz' 'csv_file'
正确的做法是读取文件的列,并从循环中每行的列中获取所需的数据。
但是当我使用第三列(hg19或gg5)作为TRUE或FALSE语句来获得不同的条件时:
如果hg19为TRUE,那么'hg19.fa'是正确的
如果gg5为TRUE,那么'gg5.fa.gz'是正确的 但脚本的输出不同:
LOOP
/home/trotos/lane2_I15_1458_08.fastq.gz
42
**gg5**
/home/trotos/lane2_I15_1458_08.fastq.gz
/home/trotos/lane2_I15_1458_08.fastq
/home/trotos/lane2_I15_1458_08
....
1
**/home/trotos/Downloads/chromosomes/hg19.fa**
.....
END LOOP
第一个问题是,当col3 == hg19时,它会给出正确的输出,即“/home/trotos/Downloads/chromosomes_hg19/hg19.fa”。但是当col3 == gg5时,我仍然得到相同的“/home/trotos/Downloads/chromosomes_hg19/hg19.fa”。 那么我能得到正确的答案? 第二个是如何使用“if then else”语句来获取与第3列对应的特定文件,并使用在以下定义的循环中使用该信息:
for i in $col1; do.
提前谢谢你。 我希望我的描述不会让你感到困惑。