2016-04-01 10 views
0

Yardım ve destek için çok teşekkür ederim. Eh, aşağıdaki dosya:Dosyayı Linux ile düzenle

name id alello chr pos snp  
s1  215  a 1 11 a215  
s1  216  a 1 11 a216  
s1  217  a 1 11 a217  
s1  218  a 1 11 a218  
s2  215  b 2 22 b215  
s2  216  b 2 22 b216  
s2  217  b 2 22 b217  
s2  218  b 2 22 b218 

ve dosya bu şekilde olması gerekiyor:

snp allelo chr pos 215  216  217 218  
s1  a 1 11 a215 a216 a217 a218  
s2  b 2 22 b215 b216 b217 b218 

, birisi bana yardım eder misiniz? Kurtarmaya çok teşekkürler

+0

Soruyu düzenlemek için teşekkürler, Jas. –

cevap

1

awk!

$ awk 'NR==1{h=$1 OFS $3 OFS $4 OFS $5; next} 
      {a[$1]=(($1 in a)?(a[$1] OFS $NF):($3 OFS $4 OFS $5 OFS $6)); 
      if(!($2 in b)) {h=h OFS $2; b[$2]}} 
     END{print h; for(k in a) print k,a[k]}' file | column -t 

name alello chr pos 215 216 217 218 
s1 a  1 11 a215 a216 a217 a218 
s2 b  2 22 b215 b216 b217 b218 
+0

Merhaba adamım, teşekkürler. Ama çalışma, bir hata mesajı görüntülenir. satır 2: $: komut bulunamadı –

+0

Üzgünüz, bu mükemmel çalışıyor ... –

+0

Çok teşekkürler. –

0
$ cat tst.awk 
NR == 1  { hdr = $1 OFS $3 OFS $4 OFS $5; next } 
!seen[$2]++ { hdr = hdr OFS $2 } 

$1 != prev { 
    if (++numRows > 1) { 
     if (numRows == 2) { 
      print hdr 
     } 
     print row 
    } 
    row = $1 OFS $3 OFS $4 OFS $5 
} 
{ row = row OFS $6; prev = $1 } 
END { print row } 

$ awk -f tst.awk file | column -t 
name alello chr pos 215 216 217 218 
s1 a  1 11 a215 a216 a217 a218 
s2 b  2 22 b215 b216 b217 b218 

bu irade çıkışı bir anda onlar girdi görünen sırayla satır ve sadece hafızada saklar bir satır senin girdi dosyası ne kadar büyük olursa olsun iyi çalışacak, böylece Not.

+0

Teşekkürler ama ben koşamadım. Birçok hata görünür: ./tr.sh: satır 3: NR: komut bulunamadı ./tr.sh: satır 3: sonraki: komut bulunamadı ./tr.sh: satır 4:! Seen [] ++ : komut bulunamadı ./tr.sh: satır 6:! =: komut bulunamadı ./tr.sh: satır 8: beklenmedik belirtecin yanında sözdizimi hatası '} ' ./tr.sh: satır 8:'} ' Yardımcı olabilirseniz çok minnettar olacağım. Saçma sapan hatalar görüyorlar, ama ben bir adamım ve düzeltemiyorum. –

+0

Komut dosyanızı görmeden hata ayıklamak benim için zor ama bir ** GUESS ** belki de awk betiğini 'tr.sh' adlı bir dosyaya koyduktan sonra' ./tr.sh dosyası olarak çalıştırmayı denediniz. awk -f tr.sh dosyası yerine. Awk kabuk değil, awk kendi sözdizimi ve semantiği ile kabuktan aradığınız bir araçtır. –