Во-первых, мне кажется, я неправильно читаю ваш вопрос. Я понимаю, что это означает, что вам разрешен только исходящий трафик на порт 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
Как насчет
$ awk -F, 'NR==FNR {a[$1]; next} $1 in a {print; delete a[$1]}' file1 file2
foo,1
boo,1
На самом деле нет 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»
Вариант известной идиомы «увиденный».
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
Я также использовал 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