Aşağıdaki yatak satırlarıyla başlayan bir dosya oluşturdum:
$ head -6 /tmp/bed_with_gene_ids.bedI 3746 3909 "WBGene00023193". -I 3746 3909 "WBGene00023193". -I 4118 4220 "WBGene00022277". -I 4118 4358 "WBGene00022277". -I 4118 10230 "WBGene00022277". -I 4220 4223 "WBGene00022277". -
Başlangıç için minimum ve bitiş için maksimum sayı alarak ad alanına (4. sütun) göre onları birleştirmek istiyorum. Aynı ada sahip tüm kayıtlar için diğer alanların aynı olması beklenir.
Beklenen sonuç:
I 3746 3909 "WBGene00023193". -I 4118 10230 "WBGene00022277". -
bedtools groupby
'e dayalı potansiyel bir çözüm buldum: https://www.biostars.org/p/145751/#145775
Örnek veriler:
cat genes.bedchr14 49894259 49895806 ENSMUST00000053290 0.000000 ... chr14 49894873 49894876 ENSMUST00000053290 0.000000. ..chr14 49894876 49895800 ENSMUST00000053291 0.000000 ... chr14 49895797 49895800 ENSMUST00000053291 0.000000 ... chr14 49901908 49901941 ENSMUST00000053291 0.000000 ...
Örnek çıktı:
>sırala -k4,4 genes.bed \ | groupBy -g 1,4 -c 4,2,3 -o sayım, min, maks \ | awk -v OFS = '\ t' '{print $ 1, $ 4, $ 5, $ 2, $ 3}' chr14 49894259 49895806 ENSMUST00000053290 2chr14 49894876 49901941 ENSMUST00000053291 3
Ancak:
groupBy davranışını anlamıyorum (Neden
-g 1,4
ve sadece-g 4
değil?, Neden-c 4,2,3
bu sırayla ve sonraawk
?)Bu kod değil benim için çalışın.
Yukarıda verilen çözümü denediğimde ne olacağı:
$ head -3 /tmp/bed_with_gene_ids.bed | bedtools groupby -g 1,4 -c 4,2,3 -o sayım, min, maks | awk -v OFS = '\ t' '{baskı $ 1, $ 4, $ 5, $ 2, $ 3}' 3 3746 4220
İşte işe yarayacağını düşündüğüm şeye dayalı girişimler dokümantasyon:
$ head -6 /tmp/bed_with_gene_ids.bed | bedtools grubu -g4-c 1,2,3,4,5,6 -o ilk, min, maks, farklı, ilk, ilk, 3746 10230 "WBGene00022277", "WBGene00023193". - $ kafa -6 /tmp/bed_with_gene_ids.bed | yatak takımları grubu -g4-c 1,2,3,4,5,6 -o ilk, min, maks, son, ilk, ilkI 3746 10230 "WBGene00022277". - $ kafa -6 /tmp/bed_with_gene_ids.bed | yatak takımları grubu -g 4-c 1,2,3,5,6 -o önce, min, max, ilk, ilk I 3746 10230. -
Neden iki farklı değere sahip olduğum 4. sütuna göre gruplandırdığımda, sonuçta iki satır elde edemiyorum anlamıyorum.
Dokümantasyon sayfasındaki yorumlara dayanarak dokümantasyonun güncel olmadığını anlıyorum. Özellikle, tüm alanların çıktısının alınmasını isterse gerekli olan bir
-full
seçeneği vardır. Yukarıda bahsedilen çözümü yeniden okuduktan sonra, artık-g seçeneği
veawk
yeniden düzenlemesi için birden çok sütunun nedenini anladığımı düşünüyorum. Bu nedenle aşağıdaki girişim.$ head -6 /tmp/bed_with_gene_ids.bed | yatak takımları grubu: -g 1,4,5,6-c 2,3 -o min, maks. tam 3746 3909 "WBGene00023193". - 3746 10230
Ancak bu hala bana iki satır vermiyor.
İstediğimi verimli bir şekilde yapabilecek başka araçlar var mı?
Düzenleme: Çözüm
Bu yanıta göre, temel araçlarla ilgili sorun, en son sürümde (Ağustos 2017 itibarıyla 2.26.0) bir hata olmasıdır. İşlevsel bir
bedtools grubuna
sahip olmak için, geliştirme sürümünü github'dan almanız gerekir.Bedtools'un github sürümüyle, artık beklenen sonucu şu şekilde alabilirim:
$ head -6 /tmp/bed_with_gene_ids.bed | yatak takımları grubu -g 1,4,5,6 -c 2,3 -o min, max | awk -v OFS = "\ t" '{baskı $ 1, $ 5, $ 6, $ 2, $ 3, $ 4}' I 3746 3909 "WBGene00023193". -I 4118 10230 "WBGene00022277". -
Yazdırılmalarını sağlamak için
-g
içine (4. alanın yanı sıra) 1, 5 ve 6 numaralı alanları dahil ediyorum. Yatak dosyamda, belirli bir alan 4 değeri için aynı olmaları gerekir.awk
kısmı, görünüşe göre çıktı sırası üzerinde tam kontrole sahip olmadığı için gereklidir:-g
alanları-c
alanlarından önce gelir.