У меня есть задача. Я должен рассчитывать внутренние и внешние водные мосты из данных. Я хочу показать вам, как мне их считать.
Например, у меня есть файл данных:
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
input
MGD12 SOL54
MGD14 SOL74
MGD10 SOL37
MGD16 SOL65
MGD21 SOL66
MGD2 SOL65
MGD64 SOL74
MGD10 SOL37
MGD72 SOL74
MGD12 SOL54
На выходе у меня пустая строка (probe2.txt) )
Когда я пробую другой сценарий
#!/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
У меня снова пустой вывод.