J'ai un fichier de délimitation d'onglet

NC_044998.1     4015    0       TT      2       GG      0       TT      0       TT      0       TT      
NC_044998.1     4015    0       AT      0       TT      0       TA      2       GG      0       TT      
NC_044998.1     4016    0       TT      0       TT      0       TT      0       TT      0       TT      
NC_044998.1     4016    0       TT      0       TT      0       TT      0       TT      0       TT      
NC_044998.1     4017    2       CC      2       CT      2       CC      2       CC      2       CC      

Je veux ajouter une colonne à la fin avec les comptes de colonnes qui sont des répétitions de deux lettres, comme dans TT (mais n'importe quelle lettre est possible).

Pour que la sortie soit

NC_044998.1     4015    0       TT      2       GG      0       TT      0       TT      0       TT  5  
NC_044998.1     4015    0       AT      0       TT      0       TA      2       GG      0       TT  3    
NC_044998.1     4016    0       TT      0       TT      0       TT      0       TT      0       TT  5    
NC_044998.1     4016    0       TT      0       TT      0       TT      0       TT      0       TT  5    
NC_044998.1     4017    2       CC      2       CT      2       CC      2       CC      2       CC  4   

J'essaie actuellement de diviser toutes les autres colonnes, puis de les comparer en utilisant

awk 'BEGIN {FS = OFS = "\t"} {for (i=4; i<=12; i+=2) {sub(/./,"&\t",$i)1;} print $0};' file | awk 'BEGIN {FS = OFS = "\t"} {count = 0} {for (i=4; i<=17; i+=3) {if ($i==$i-1) count+=1} END {print 0,$count}}' 

Il se divise correctement, mais il ne compte pas les occurrences.

awk
1
Madza Farias-Virgens 27 oct. 2020 à 23:07

2 réponses

Meilleure réponse

Vous pouvez utiliser cet awk:

awk 'BEGIN {
   FS=OFS="\t"
}
{
   c = 0
   for (i=4; length($i)==2 && i<=12; i+=2)
     substr($i,1,1) == substr($i,2,1) && c++
   print $0, c
}' file
NC_044998.1 4015    0   TT  2   GG  0   TT  0   TT  0   TT  5
NC_044998.1 4015    0   AT  0   TT  0   TA  2   GG  0   TT  3
NC_044998.1 4016    0   TT  0   TT  0   TT  0   TT  0   TT  5
NC_044998.1 4016    0   TT  0   TT  0   TT  0   TT  0   TT  5
NC_044998.1 4017    2   CC  2   CT  2   CC  2   CC  2   CC  4
2
anubhava 27 oct. 2020 à 20:17

Si Perl est une option, vous pouvez essayer ceci.

$ perl -lne '$c=0;  while(/\b(.)\1\b/g) { $c++ }  print "$_ $c"; ' madza.txt
NC_044998.1     4015    0       TT      2       GG      0       TT      0       TT      0       TT       5
NC_044998.1     4015    0       AT      0       TT      0       TA      2       GG      0       TT       3
NC_044998.1     4016    0       TT      0       TT      0       TT      0       TT      0       TT       5
NC_044998.1     4016    0       TT      0       TT      0       TT      0       TT      0       TT       5
NC_044998.1     4017    2       CC      2       CT      2       CC      2       CC      2       CC       4
$
1
stack0114106 28 oct. 2020 à 04:52