首页 > 解决方案 > 使用 shell 命令计算文件中文本的出现次数

问题描述

问题看起来很简单,但这里有一个转折点。考虑一个带有数据的文件:

A,B
A,C
A,D
D,A
C,A
B,A

在这里,我需要一个 bash 命令来计算发生次数

A,B
B,A

作为一个单一的计数。因此,此示例的总数应该是 3 而不是 6。

标签: bashshell

解决方案


与其他答案基本相同,但它确定了散列组件的顺序:

$ awk -F, '!(($(($1<$2)+1),$(($2<=$1)+1)) in a){a[$(($1<$2)+1),$(($2<=$1)+1)];c++}END{print c}' file
3

解释

$ awk -F, '
!( ( $(($1<$2)+1), $(($2<=$1)+1) ) in a ) {
    a[$(($1<$2)+1),$(($2<=$1)+1)]
    c++
}
END { print c }' file

$1<$2是 0 或 1,因此($1<$2)+1是 1 或 2 并且$(($1<$2)+1)$1$2。同样适用于其他组件$(($2<=$1)+1),它是$2or $1。所以,它是引用a[$1,$2]or a[$2,$1]。经测试:

A,A
A,A

<=可能只是<在后一个组件中,导致a[$1,$1]if $1==$2


推荐阅读