我是一个生物学家,开始必须学习一些基本的脚本技能来处理大型DNA序列数据集。所以请对我轻松点。我在bash中完成了这一切。我有此格式我的数据文件:for循环和如果在awk语句
CLocus_58919_Sample_25_Locus_33235_Allele_0
TGCAGGTGCTTCCAGTTGTCTTTGTAGCGTCCCACCATGATCTGCAGGTCCTTG
CLocus_58919_Sample_9_Locus_54109_Allele_0
TGCAGGTGCTTCCAGTTGTCTTTGTAGCGTCCCACCATGATCTGCAGGTCCTTG
我需要的是做的是循环遍历该文件,并从同一样品的所有序列写入自己的文件。只是要清楚,这些序列来自样品25和9。所以我的想法是用awk格式化我的文件中按以下方式:
CLocus_58919_Sample_25_Locus_33235_Allele_0_TGCAGGTGCTTCCAGTTGTCTTTGTAGCGTCCCACCATGATCTGCAGGTCCTTG
CLocus_58919_Sample_9_Locus_54109_Allele_0_TGCAGGTGCTTCCAGTTGTCTTTGTAGCGTCCCACCATGATCTGCAGGTCCTTG
然后通过管道进入另一个AWK这个if语句,如果样品说” = $然后我写出来的是整条生产线,以一个文件名为sample $我”这是我到目前为止的代码:
#!/bin/bash
a=`ls /scratch/tkchafin/data/raw | wc -l`;
b=1;
c=$((a-b));
mkdir /scratch/tkchafin/data/phylogenetics
for ((i=0; i<=$((c)); i++)); do
awk 'ORS=NR%2?"_":"\n"' $1 | awk -F_ '{if($4==$i) print}' >> /scratch/tkchafin/data/phylogenetics/sample.$i
done;
我明白这是行不通的,因为$i
是单引号这样的bash是不承认它。我知道awk
有一个-v
选项用于将外部变量传递给它,但我不知道如何在这种情况下应用该选项。我试图在awk
声明中移动for
循环,但是这不会产生所需的结果。任何帮助将非常感激。
我的perl使用经验有限。问题是我非常大的管道的其余部分已经写成bash。 – user3087875
我知道学习曲线看起来更加令人生畏,但这是一个非常适合perl字符串解析的问题。您可以通读这些行并将您需要的数据收集到字符串数组的散列中,例如 $样品{ 'CLocus_58919_Sample_25'=> { 'Locus_33235_Allele_0'=> 'TGCAGGTGCTTCCAGTTGTCTTTGTAGCGTCCCACCATGATCTGCAGGTCCTTG', '一些其他locaus AMD等位基因'=> 'DNA序列' } } 一旦这样做了遍历和写入文件/文件会相对容易 –
previouse评论真的没有出来我想要的方式,对不起。 您仍然可以使用您拥有的bash脚本。只需为它的这一部分调用一个perl脚本即可。 –