Awk 计算每行重复的列数
我有一个tab delim文件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
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
$
也谢谢你的这张!也谢谢你的这张!