在awk中以特定方式计数

问题描述

我有问题。这是我输入文件的一小部分

URLSession:dataTask:didReceiveData:

我需要计算特定的重复次数。您可以计数,如果第一行中的两个不同行中的SOL相同,第二列中的一个行MGD1-225,则必须在另一行MGD 676-900 例如

SOL168 MGD750
SOL259 MGD11
SOL363 MGD38
SOL168 MGD142
SOL363 MGD784
SOL660 MGD752
SOL440 MGD38
SOL440 MGD38

,这算作一个一个例子

SOL115 MGD201
SOL115 MGD782

在我的输入文件中,我期望输出

SOL749 MGD751
SOL749 MGD111

因为SOL363与MGD38(来自第一层)以及MGD784(来自第二层)-第一垂直水桥具有键

SOL168与MGD750(第二层)和MGD142(第一层)具有键

现在可以正常工作了,我的整个脚本

2

解决方法

使用MGD作为字段分隔符,$2成为数字层指示器,awk可以非常直接地表达您的问题陈述:

BEGIN { FS = "MGD" }
$2 >= 1 && $2 <= 225 { layer1[$1]++ }
$2 >= 676 && $2 <= 900 { layer2[$1]++ }
END {
    total = 0
    for (sql in layer1) {
        if (sql in layer2)
            ++total
    }
    print total
}


$ awk -f a.awk file
2