На B создайте обратный туннель от A :59103. Конечная точка относительно B — C :9103.
ssh -R 59103:C:9103 A
Измените номер порта на A с его 59103 на что-то подходящее.
Это решение принимает ваше утверждение о том, что B может достичь C за чистую монету. Соединение от B к C не защищено с помощью ssh
.
СGNU awk
:
$ awk 'BEGIN{PROCINFO["sorted_in"] = "@val_num_desc"}
{a[$2]+=$1} END{for(k in a) print a[k], k}' ip.txt
8 UA
6 US
2 GB
См. руководство gawk :Использование предопределенных порядков сканирования массивов для получения подробной информации об опциях сортировки.
Сperl
:
perl -lane '$h{$F[1]}+=$F[0]; END{print "$h{$_} $_" for
sort {$h{$b} <=> $h{$a}} keys %h}' ip.txt
Использование GNUdatamash
:
$ datamash -W -s -g 2 sum 1 <file
GB 2
UA 8
US 6
Это обрабатывает пробелы как разделители полей, сортирует ввод по второму полю, группирует его по этому полю и суммирует первое поле для каждой группы.
Направьте вывод через awk '{ print $2, $1 }'
, если вы хотите поменять местами столбцы(datamash
всегда записывает столбец группировки первым в своем выводе )и sort -nr
, если вы хотите отсортировать этот вывод в порядке убывания, как в вашем пример:
$ datamash -W -s -g 2 sum 1 <file | awk '{ print $2, $1 }' | sort -nr
8 UA
6 US
2 GB
Использование awk
для суммирования:
$ awk '{ sum[$2] += $1 } END { for (i in sum) print sum[i], i }' file
8 UA
2 GB
6 US
Пропустите это через sort -nr
для сортировки, как описано выше.