Существует инструмент, известный как netstat-nat
; это, кажется, работает. Однако мне не удалось скомпилировать его для ARM.
Итак, я написал свой собственный инструмент, который делает то, что netstat-nat
делает; хотя проще портировать на другие архитектуры :nat-stat
, которые доступны на GitHub .
Чтобы вручную просмотреть соединения, см. /proc/net/nf_conntrack
или /proc/net/ip_conntrack
.
$ awk 'NR==FNR { a[$1]++ ; next}; $1 in a' file2 file1
c cat
e eagle
f fire
Это считывает вfile2
(первый аргумент имени файла )и сохраняет его в массиве a
. Он определяет, читает ли он первый файл, проверяя, равно лиNR
(общее количество просмотренных входных записей )FNR
(номеру входной записи текущего входного файла)
Затем он считываетfile1
(второй аргумент имени файла )и, если первое поле находится в массиве a
, печатает соответствующую строку ввода (в awk
— действие по умолчанию при любом успешном результате теста., такой как $1 in a
, должен напечатать входную строку -, поэтому $1 in a
сам по себе эквивалентен$1 in a {print}
).
Кстати, во многих случаях подобные задачи можно выполнить с помощью grep -f file2 file1
, но это будет соответствовать содержимому файла2 в любом месте в файле1 -, например. c
из файла2 будет соответствовать не только cat
, но и jack
в файле1.
Это задание для coreutils:-)
Если файлы уже отсортированы и имеют общее поле в первом столбце:
$ join file1 file2
c cat
e eagle
f fire
Если ваши файлы не отсортированы:
join <(sort file1) <(sort file2)
Решение с использованием опции grep
-f
с помощью sed
(, предложенное cas):
$ grep -f <(sed 's/^/^/' file2) file1
c cat
e eagle
f fire
Команда sed 's/^/^/' file2
добавляет знак вставки ^
в начало каждой строки в file2
. Мы используем этот вывод в качестве входного файла шаблона для опции grep
-f
, используя подстановку процесса (<(…)
).
Команда grep
печатает те строки в file1
, которые соответствуют шаблонам подстановки команд. Нам нужен символ ^
в наших шаблонах, чтобы соответствовать тем строкам, которые начинаются с данным символом.