如何使用awk在行中找到连续的模式?

时间:2017-05-23 00:55:41

标签: linux awk

我正在尝试创建一个awk脚本,该脚本能够根据第3个字段计算连续模式的数量,并且如示例中那样打印第一个和最后一个坐标字段(第2个字段)。

我有一个脚本可以计算我想要的任何坐标窗口中的模式数量,例如:1000000将数据置于中间位置:

awk '{a[$1 FS 1000000*int(($2-1)/1000000)+500000]++} END{for(k in a) print k,a[k]}' file

然而,无论是1/1还是0/1,它都在计算所有模式的数量。

17 38172452 1/1
17 38172942 1/1
17 38172973 1/1  
17 38173143 0/1
17 38176256 0/1
17 38176476 1/1
17 38178149 0/1
17 38178627 0/1
17 38179275 0/1
17 38179290 0/1
17 38179492 0/1
17 38179667 1/1
17 38182229 0/1
17 38183090 0/1
17 38183505 0/1
17 38188419 0/1
17 38188844 0/1
17 38189049 0/1

预期结果:

17 38172452 38172973 3 1/1
17 38173143 38176256 2 0/1
17 38178149 38179492 5 0/1
17 38182229 38189049 6 0/1

你能帮助我吗?

1 个答案:

答案 0 :(得分:1)

假设$1没有改变......

awk '{if(p==$3) {c++; e=$2}
      else {if(c>1) print $1,b,e,p,c; 
            b=$2; c=1; p=$3}}
 END {print $1,b,$2,p,c}' file