Пересечение двух файлов с неравными столбцами: распечатать строки общих столбцов

Существует инструмент, известный как netstat-nat; это, кажется, работает. Однако мне не удалось скомпилировать его для ARM.

Итак, я написал свой собственный инструмент, который делает то, что netstat-natделает; хотя проще портировать на другие архитектуры :nat-stat, которые доступны на GitHub .

Чтобы вручную просмотреть соединения, см. /proc/net/nf_conntrackили /proc/net/ip_conntrack.

0
21.08.2019, 12:23
3 ответа
$ 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.

0
28.01.2020, 02:17

Это задание для coreutils:-)

Если файлы уже отсортированы и имеют общее поле в первом столбце:

$ join file1 file2
c cat
e eagle
f fire

Если ваши файлы не отсортированы:

join <(sort file1) <(sort file2)
4
28.01.2020, 02:17

Решение с использованием опции grep-fс помощью sed(, предложенное cas):

$ grep -f <(sed 's/^/^/' file2) file1
c   cat
e   eagle
f   fire

Команда sed 's/^/^/' file2добавляет знак вставки ^в начало каждой строки в file2. Мы используем этот вывод в качестве входного файла шаблона для опции grep-f, используя подстановку процесса (<(…)).

Команда grepпечатает те строки в file1, которые соответствуют шаблонам подстановки команд. Нам нужен символ ^в наших шаблонах, чтобы соответствовать тем строкам, которые начинаются с данным символом.

0
28.01.2020, 02:17

Теги

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