在awk中以特定方式计数

Count in specific way in awk

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

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

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

SOL115 MGD201
SOL115 MGD782

这算一个 另一个例子

SOL749 MGD751
SOL749 MGD111

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

2

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

SOL168 与 MGD750(第二层)和 MGD142(第一层)有结合

现在可以了,我的整个脚本

#!/bin/bash
for index in {1..100} # I do this script on 100 files, that is s why I use for loop
do
awk '
    BEGIN { FS = "MGD" }
     >= 1 &&  <= 225 { layer1[]++ }
     >= 676 &&  <= 900 { layer2[]++ }
    END {
        for (sql in layer1) {
        if (layer1[sql] == 1 && layer2[sql] == 1)
            ++total
    }
    print total
    }
' eq5_15_333_lipid_sol_fragment_$index.ndx >> vertical_water_bridges.txt 
done

使用 MGD 作为字段分隔符,</code> 成为数字层指示器,awk 可以非常直接地表达您的问题陈述:</p> <pre><code>BEGIN { FS = "MGD" } >= 1 && <= 225 { layer1[]++ } >= 676 && <= 900 { layer2[]++ } END { total = 0 for (sql in layer1) { if (sql in layer2) ++total } print total } $ awk -f a.awk file 2