awk 'BEGIN { FS=OFS="\t"; d["High"]=1; d["Medium"]=2; d["Low"]=3 } { print d[$3], $0 }' file |
sort -t $'\t' -k3,3 -k1,1n | sort -t $'\t' -s -u -k3,3 | cut -f 2-
К сожалению, слова «Высокий», «Средний» и «Низкий» не сортируются по алфавиту в этом порядке, поэтому вместо этого мы добавляем перед каждой строкой целые числа 1, 2 и 3 для соответствующих слов в столбце 3. Это делается скриптом awk
. Целое число отделено от исходного содержимого символом табуляции и указывает на тяжесть заболевания (1 — самая высокая ).
Затем мы сортируем измененные данные о заболевании и об этом целочисленном поле, чтобы записи были сгруппированы по заболеванию и упорядочены по тяжести.
Затем мы делаем «уникальную сортировку» только с болезнями в качестве ключа (второйsort
). При этом отбрасываются любые повторяющиеся заболевания, и для каждого заболевания у нас остается только самая серьезная запись. -s
заставляет sort
использовать стабильный алгоритм сортировки, сохраняющий переупорядочивание записей с одинаковыми ключами.
cut
в конце удаляет целое число, которое мы ранее добавили с помощью awk
.
Конвейер предполагает использование bash
для указания разделителя полей для команд sort
. Если bash
не используется, вставьте литеральную табуляцию с одной кавычкой вместо использования $'\t'
(, вы, вероятно, можете сделать это, нажав Ctrl+VTab).
Недавно я проделал то же самое для подключения к IoT-устройствам, подключенным к Интернету через мобильную сеть и, следовательно, под NAT.
Мое решение основано на микроэкземпляре -в Google Cloud. Его IP должен быть постоянным, назовем его server_ip
. Кажется, что правила брандмауэра не нужны.
На локальном устройстве, к которому вы хотите подключиться удаленно, запустите:
ssh -N -R 5757:localhost:22 <server_ip>
где 5757 — это порт прослушивания, который будет открыт на сервере (это может быть что угодно, но только не 1023 ). Это указывает серверу
На оконечном -устройстве, например. на своем ноутбуке, когда вы находитесь вдали от дома, запустите:
ssh -J <server_ip> -p 5757 localhost
это соединит вас через узел перехода , маршрутизируя ssh-соединение непосредственно на открытое соединение с вашего домашнего устройства.
Чтобы сделать все более безопасным и плавным, я предлагаю вам использовать аутентификацию на основе ключа SSH -как на сервере, так и на вашем домашнем устройстве. Если вам нужна дополнительная помощь, пожалуйста, прокомментируйте.
И последнее замечание: первая команда(ssh -N -R 5757:localhost:22 <server_ip>
)не должна быть завершена, поэтому вы должны запустить ее с помощью nohup
или через службу. Я предпочитаю последнее решение, вот мой служебный файл:
[Unit]
Description=Reverse SSH to GCL on port 5757
After=network.target
[Service]
Type=simple
User=flynn
ExecStart=/usr/bin/ssh -N -R 5757:localhost:22 <server_ip>
Restart=always
StartLimitInterval=30
[Install]
WantedBy=multi-user.target