[英]Counting with a complicated conditions using awk
我有一個任務。 我必須從數據中計算出內水橋和外水橋。 我想告訴你我應該如何計算它們。
例如,我有一個數據文件:
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)
在 output 中,我只想要內外水橋的數量。 在這種情況下,它將只有數字 4 和 5。
4 5
我嘗試寫一個腳本,但我不知道我應該設置什么條件,也許我應該使用 arrays?
#!/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
在 output 我有一個空行(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
我又空了 output。
雙掃描方法更容易......
$ 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.