Первое совпадение - awk

Во-первых, мне кажется, я неправильно читаю ваш вопрос. Я понимаю, что это означает, что вам разрешен только исходящий трафик на порт 80. Для меня это означает, что вам нужно общаться с порта 80 на порт 22 вашего сервера. К счастью, это вполне возможно с использованием backpipes и netcat. Вот процесс:

Сначала создайте обратную трубу:

# mknod backpipe p

Затем создайте прослушиватель netcat, который соединяет вашу обратную трубу и отправляет информацию из порта по вашему выбору (80) в порт по вашему выбору (22):

# nc -l -p 222 0<backpipe | nc -p 80 SERVERIP 22 | tee backpipe

Наконец, просто подключитесь к порту прослушивания!

# ssh (hidden) -p 222


Вот разбивка линии обратной связи для любопытных:

nc -l -p 222 0<backpipe

Это настраивает прослушиватель netcat, который прослушивает порт 222 (вы можете изменить это на любой порт, который хотите, Я просто выбрал 222) и отправил все данные в вашу трубку.

nc -p 80 SERVERIP 22

Это устанавливает порт источника 80 на порт 22 SERVERIP. Это соединение, которое OP хотел в своем сообщении, но мы хотим передать SSH-соединение через это, поэтому возникла необходимость в обратном трубопроводе.

tee backpipe

Это отправляет ваш STDOUT в обратную трубу, а также на ваш терминал. Если вы не хотите видеть данные, вы можете заменить их этой строкой:

# nc -l -p 222 0<backpipe | nc -p 80 SERVERIP 22 1> backpipe
5
23.05.2019, 15:24
4 ответа

Как насчет

$ awk -F, 'NR==FNR {a[$1]; next} $1 in a {print; delete a[$1]}' file1 file2
foo,1
boo,1 
9
27.01.2020, 20:31

На самом деле нет awk, но это работает. И я полагаю, что это позволяет легко расширить.

#!/usr/bin/env bash

while IFS= read -r line; do
    grep -m1 "$line" "$2"
done < "$1"
$./script.sh file1 file2

Взял строку чтения -на -строку изhttps://stackoverflow.com/questions/10929453/read-a-file-line-by-line-assigning-the-value-to-a-variable.
Тогда это просто «найти первое совпадение с содержимым строки в файле2»

2
27.01.2020, 20:31

Вариант известной идиомы «увиденный».

awk -F, 'FNR==NR{a[$1]=1;next} a[$1]++==1' file1 file2

обновление

Как указал @dave _thompson _085, во втором файле может быть несколько soo,#, поэтому a[$1]++==1будет истинным для второго. Он также дает несколько способов исправить это :

.
awk -F, 'FNR==NR{a[$1]=1;next} !--a[$1]' file1 file2
6
27.01.2020, 20:31

Я также использовал awk, но другим способом

команда

awk -F "," 'NR==FNR{a[$1];next}($1 in a){print $0}' file1.txt file2.txt| awk -F "," '{if (!seen[$1]++)print }'

выход

awk -F "," 'NR==FNR{a[$1];next}($1 in a){print $0}' file1.txt file2.txt| awk -F "," '{if (!seen[$1]++)print }'
foo,1
boo,1 
2
27.01.2020, 20:31

Теги

Похожие вопросы