在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
我有问题。这是我的输入文件的一小段
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