2016-04-08 15 views
0

Ben 60,000 kayıtları ile bu tablo belge var: ÖncedenHata önceden sıralanmış dosyaları (Ubuntu terminall ve Gawkl) kullanılarak "sıralanmamıştır"

head -2 hg38.txt 

717 NM_000525 chr11 - 17385248 17388659 17386918 17388091 117385248, 17388659, 0 KCNJ11 cmpl cmpl 0, 
987 NM_000242 chr10 - 52765379 52771700 52768136 52771635 452765379,52769246,52770669,52771448, 52768510,52769315,52770786,52771700, 0 MBL2 cmpl cmpl 1,1,1,0, 

, ondan çıkarılan, som hatlarını seçilen üçüncü sütun, ve başka chromosomes.txt dosyası

gawk '{print $3}' hg38.txt | sort -u | grep -v "_" | sort -o chromosomes.txt 
head -5 chromosomes.txt 
chr1 
chr10 
chr11 
chr12 
chr13 

kaydetmek ve şimdi, "kromozomların" için aynı alan sahip olan kayıt seçmek istiyorum, ama benim sonuca da başka bir alan istiyoruz beri Bunu yapıyorum:

join: -:833: is not sorted: chr10 GLRX3 

Onlara nasıl katılabilir?

gawk '{print $3, $13}' hg38.txt | sort | join - chromosomes.txt > final.txt 

Ama komutu katılmak konusunda uyarıyor? Ayrıca, katıldıktan sonra, geçici bir dosya oluşturmak yerine, yalnızca ekleyerek daha fazla şey yapabilir misiniz? Örneğin:

gawk '{print $3, $13}' hg38.txt | sort | join - chromosomes.txt | gawk '{print $2}' | uniq -c | gawk 'BEGIN{t=0}{t=t+$1} END{print t/NR}' 

Yanıtlarınız için şimdiden teşekkür ederiz!

+0

bu size orijinal dosya kayıtlarını vermeyecek mi? Tanım olarak, chromosomes.txt dosyasındaki tüm kayıtlar hg38.txt dosyasında bulunur. Neyi başarmak istiyorsunuz, belki daha kolay bir alternatif var. – karakfa

+0

Aynı sonucu beklemiyorum. Chromosomes.txt dosyasını oluşturarak, sadece üçüncü alanda _ yazmayan kayıtları kaydettiğimden, üçüncü alana (_) sahip olan satırları kaldırmak için birleşim ile birlikte kullanacağımdan bir şablon oluşturuyorum.). Üzgünüm Açık değilim, ama benim için de karmaşık: S –

+0

böylece sadece üçüncü alanın "_" olduğu kayıtlara filtre uygulamak ister misiniz? sadece 'awk' kullan 3 $! = "_" {print $ 3, $ 13} 'dosya' katılmalarına gerek yok. Çıkışı gerektiği gibi sıralayabilirsiniz. – karakfa

cevap

1

Neden filtreyi gawk'da yapmıyorsunuz?

gawk '{ if (!match($3,"_")) {print $3, $13} }' hg38.txt 
+0

veya daha fazla idiomatic '$ 3! ~/_/{Print .. ' – karakfa

+0

Çok teşekkürler! Bash veya gawk kullanma konusunda uzmanlığım yok. Bir biyoteknoloji derecesi okudum ve şimdi birkaç hafta boyunca biyoinformatikte bir ustalık yapıyorum. Yani, pek fazla komutta öğretilmemiştim. Tekrar teşekkürler! –

+0

Tekrar merhaba. Şimdi, maçın grep gibi çalışmadığının farkındayım. Aslında, _ ile eşleşenleri almak istemiyorum ama _ içerir. Diğer bir deyişle, üçüncü değerdeki bazı yazmaçlar chr12 ve diğerleri chr12_XXXXX gibi görünür. Yani, grep ve eşleşmek istemiyorum. Yine de çok teşekkürler! : D –