linux - 如何使用 awk 查找行中的连续模式?

标签 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 没有改变...

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

关于linux - 如何使用 awk 查找行中的连续模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44124157/

相关文章:

java - 从 Java 交互调用 bash

regex - 从 Linux 中的多个文件中删除一大串文本/代码

linux - git repo 问题相关的 puppet

c++ - Linux C++ : apis vs/proc files?

awk - 将所有列除以第一列

linux - 如何删除基于列值的重复行?

bash - 根据分隔符拆分文件,然后加入单独的行

shell - awk数组语法错误

php - 如何让用户在 MySQL 处理后检索文件?

java - 通过 Linux 终端运行 Java GUI 应用程序