如何将csv文件中的特定值解析为for循环命令



我正在尝试编写一个for循环,在该循环中,我有条件地将csv文件中的特定值解析到do命令中。

我的情况如下:我有几个包含基因组序列的目录。对样本进行编号,并相应地命名目录。

Dir 1 contains sample1_genome.fasta
Dir 2 contains sample2_genome.fasta
Dir 3 contains sample3_genome.fasta

基因组序列具有不同的平均读取长度。解决这个问题很重要。因此,我创建了一个csv文件,其中包含样本编号和基因组序列的平均读取长度。csv文件示例(第一列=sample_no,第二列=avg_read_length(:

1,130
2,134
3,129

现在,我想循环浏览目录,将基因组序列作为输入,并解析相应的平均读取长度。

我的代码如下:

for f in *
do 
shortbred_quantify.py --genome $f/sample${f%}.fasta --aerage_read_length *THE SAMPLE MATCHING VALUE FROM 2nd COLUMN* --results results/quantify_results_sample${f%}
done

你能帮我解决这个问题吗?

使用awk$2是第二个字段,$1是第一个字段。例如:

$ cat input
1,130
2,134
3,129
$ awk '$2 == avgReadBP{ print $1 }' FS=, avgReadBP=134 input
2

所以你的命令最终看起来像:

input="$f"/genome_sample.fasta
shortbred_quantify.py --genome "$input" 
--avgreadBP "$(awk '$2 == a{ print $1 }' FS=, a="$value_to_match" "$input")" 
--results results/quantify_results_sample"${f}"

别忘了引用文件名。

我会按照以下几行构建它:

while IFS=, read sample read_length
do
shortbred_quantify.py --genome "$sample/genome_sample.fasta" --avgreadBP "$read_length" --results "results/quantify_results_sample$sample"
done < ./input

最新更新