如何计算bash中一列数据中的连续重复次数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何计算bash中一列数据中的连续重复次数?相关的知识,希望对你有一定的参考价值。

如果我有一个很长的文本文件,如下所示:

A
A
B
B
A
A
A
B
A
A
B
A
...

我想找到'A'的数量连续(例如1,2,3 ......),然后报告每个序列中有多少个。

所以上面的代码片段会给我3:1,2:2:1:1,其中第一个数字是顺序'A'的数字,第二个数字是这些序列中有多少出现在整个文件中。

这可能在bash / awk / sed等吗?

我尝试使用awk来计算实例数:

awk ' BEGIN {count=0;}  { if ($1 == "A") count+=1} end {print $count}'

但我不知道如何获得序列长度的信息。

答案

在一个命令中:

awk '/A/{c++;next}
     c{a[c]++;c=0}
     END{if(c){a[c]++}
         for(i in a) {print i":"a[i]}
     }' <file>
  • /A/{c++;next}如果该行包含A增加计数器c并移动下一行
  • c{a[c]++; c=0}如果cZERO不同,增加存储在c中的a[c]的频率,并将c设置为ZERO
  • END打印频率。
另一答案

Awk解决方案:

awk '{ if ($1 == "A") { k++ } else if (k) { a[k]++; k=0 } }
     END{ if (k) a[k]++; for (i in a) print i ":" a[i] }' file

输出:

1:1
2:2
3:1
另一答案

一条非awk管道

$ uniq -c file | grep A | sort -r | 
  rev | uniq -c | rev | sed 's/ A /:/;s/  *//g' | paste -sd,

3:1,2:2,1:1
另一答案
< your_file 
  uniq -c | # count the number of occurrences in a row
  awk '$2 == "A" { print $1 }' | # keep only the counts of “A” (and not the “A” themselves)
  sort | # sort the counts
  uniq -c | # count the number of occurrences of each count
  awk '{ print $2 " " $1 }' | # swap the count of count and the count
  sort -nrk1 | # sort by count, numerically, decreasing
  tr ' ' : # use a colon as separator instead of a space

输出:

3:1
2:2
1:1

以上是关于如何计算bash中一列数据中的连续重复次数?的主要内容,如果未能解决你的问题,请参考以下文章

怎么去除datatable 中一列的重复值【急】

powerbi如何统计某列数据中,两项出现的次数

SQL如何查询出某一列中不同值出现的次数?

sql查询 表中一列不重复 显示多列

使用条件删除数据框中一列上的重复值[重复]

如何查找EXCEL单列中存在的重复数据