【发布时间】:2020-07-26 06:04:30
【问题描述】:
我有一个任务。我必须从数据中计算出内水桥和外水桥。我想告诉你我应该如何计算它们。
例如,我有一个数据文件:
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
我的输出又是空的。
【问题讨论】:
标签: if-statement awk text-processing