Это то, для чего вы могли бы рассмотреть возможность использования небольшой базы данных -, используя, например, csvsql
из csvkit (, который также предоставляет удобную csvformat
утилиту ).
Например, предположим, что ваши данные находятся на вкладке -в отдельных файлах с именами intervals
и positions
и с использованием диалекта по умолчанию sqlite
:
csvsql --tabs --query '
SELECT id,number,group_concat(id_uniq) AS "assigned1"
FROM positions JOIN intervals USING(id)
WHERE number >= numberA AND number <= numberB
GROUP BY id,number ORDER BY id,number
' positions intervals | csvformat --out-tabs
id number assigned1
1 19 g1,g2,g3
1 90 g6,g7
2 20 g9
2 93 g11
2 120 g11
Несколько сложнее получить N/A
записи, :для этого вы можете соединить исходную positions
таблицу с результатами и найти NULL
значения поля assigned1
:
csvsql --tabs --query '
SELECT id,number,IFNULL(assigned1,"NA") assigned1 FROM positions
LEFT JOIN (
SELECT id,number,group_concat(id_uniq) AS "assigned1"
FROM positions JOIN intervals USING(id)
WHERE number >= numberA AND number <= numberB
GROUP BY id,number
) USING(id,number) ORDER BY id,number
' positions intervals | csvformat --out-tabs
id number assigned1
1 4 NA
1 19 g1,g2,g3
1 36 NA
1 49 NA
1 90 g6,g7
2 1 NA
2 20 g9
2 89 NA
2 93 g11
2 120 g11
Вы не сможете получить нужную информацию. IP-адреса являются частью одного и того же единого интерфейса и поэтому учитываются только на физическом уровне. Я должен отметить, что «ifconfig» недостаточен и устарел . Команда ip
покажет вам сводку на физическом уровне.
% ip -s link show br1000
10: br1000: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 00:10:18:aa:a8:20 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
15661372003 108647365 0 0 0 0
TX: bytes packets errors dropped carrier collsns
278081828962 149463091 0 0 0 0
Вам нужно будет использовать iptables
или nftables
, чтобы отслеживать то, что вы хотите отслеживать.
# iptables example - probably incorrect, I don't have a dev machine to test this.
iptables -A INPUT -i br1000 -d 10.100.0.1/24 -j LOG
iptables -A OUTPUT -i br1000 -s 10.100.0.1/24 -j LOG
# nftables example - probably incorrect, I don't have a dev machine to test this.
nft add rule ip filter INPUT iifname "br1000" ip daddr 10.100.0.1 counter log
nft add rule ip filter OUTPUT iiname "br1000" ip saddr 10.100.0.1 counter log
Существуют и другие дополнительные программы, которые также могут вам помочь. -Первое, что приходит на ум, это vnstat
. Но ваш пробег может отличаться.