我有一项任务。我必须根据数据计算内部和外部的水桥。我想告诉你我该怎么数数。
例如,我有一个数据文件:
MGD12 SOL54
MGD14 SOL74
MGD10 SOL37
MGD16 SOL65
MGD21 SOL66
MGD2 SOL65
MGD64 SOL74
MGD10 SOL37
MGD72 SOL74
MGD12 SOL54
内水桥是指:MGD和SOL相同(重复(。外水桥是当:MGD不同,但SOL相同。
例如,在第三列中,我写下哪行是内水桥,哪行是外层
1.MGD12 SOL54 inner (the same in line 10)
2.MGD14 SOL74 outer (the same SOL in 7, 9)
3.MGD10 SOL37 inner (the same in line 8)
4.MGD16 SOL65 outer (the same SOL in 6)
5.MGD21 SOL66 no water bridge
6.MGD2 SOL65 outer (the same SOL in 4)
7.MGD64 SOL74 outer (the same SOL in 2, 9)
8.MGD10 SOL37 inner (the same in line 3)
9.MGD72 SOL74 outer (the same SOL in 2, 7)
10.MGD12 SOL54 inner (the same in line 1)
在输出中,我只想要内部和外部水桥的数量。在这种情况下,它将只是数字4和5。
4 5
我试着写一个脚本,但我不知道我应该把什么放在条件下,也许我应该使用数组?
#!/bin/bash
awk '{ if () inner++; else if () outer++} END { print inner " " outer}' probe.txt
编辑,我尝试使用该脚本,但它不起作用
#!/bin/bash
awk 'NR==FNR {a[$1,$2]++; s[$2]++; next}
a[$1,$2]!=s[$2] {outer++; next}
s[$2]!=1 {inner++}
END {print inner,outer}' probe.txt | tee probe2.txt
输入
MGD12 SOL54
MGD14 SOL74
MGD10 SOL37
MGD16 SOL65
MGD21 SOL66
MGD2 SOL65
MGD64 SOL74
MGD10 SOL37
MGD72 SOL74
MGD12 SOL54
在输出中,我有一个空行(probe2.txt(
当我尝试另一个scipt 时
#!/bin/bash
awk 'NR==FNR {a[$1,$2]++; s[$2]++; next}
{print $0, (a[$1,$2]==s[$2]?(s[$2]==1?"no":"inner"):"outer")}' probe.txt | tee probe2.txt
我的输出再次为空。
双扫描方法更容易。。。
$ awk 'NR==FNR {a[$1,$2]++; s[$2]++; next}
{print $0, (a[$1,$2]==s[$2]?(s[$2]==1?"no":"inner"):"outer")}' file{,}
MGD12 SOL54 inner
MGD14 SOL74 outer
MGD10 SOL37 inner
MGD16 SOL65 outer
MGD21 SOL66 no
MGD2 SOL65 outer
MGD64 SOL74 outer
MGD10 SOL37 inner
MGD72 SOL74 outer
MGD12 SOL54 inner
只是计数
$ awk 'NR==FNR {a[$1,$2]++; s[$2]++; next}
a[$1,$2]!=s[$2] {outer++; next}
s[$2]!=1 {inner++}
END {print inner,outer}' file{,}
4 5