Awk 计算每行重复的列数

Awk 计算每行重复的列数,awk,Awk,我有一个tab delim文件 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

我有一个tab delim文件

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      
我想在末尾加一列,列数是两个字母的重复,就像TT一样,但任何字母都有可能

所以输出是

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   
我目前正在尝试拆分其他每一列,然后使用

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}}' 
它正确地分割,但不计算发生次数。

您可以使用此awk:

开始{ FS=OFS=\t } { c=0 对于i=4;长度$i==2&&i您可以使用此awk:

开始{ FS=OFS=\t } { c=0
对于i=4;length$i==2&&i,如果Perl是一个选项,您可以尝试这样做

$ 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
$

如果Perl是一个选项,那么您可以试试这个

$ 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
$

也谢谢你的这张!也谢谢你的这张!