我是一個生物學家,開始必須學習一些基本的腳本技能來處理大型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腳本即可。 –