如何计算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}
如果c
与ZERO
不同,增加存储在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中一列数据中的连续重复次数?的主要内容,如果未能解决你的问题,请参考以下文章