Вы можете протестировать следующий код, в котором я разбиваю ваши ключевые слова на массив awk
с именем keys
и элементами N
. все начинается с keys[1], и мы устанавливаем флаг для проверки следующих строк с 1 по N-1
на соответствие соответствующим значениям в ключах массива [индекс от 2 до N], любые несоответствия до N -1 строка сбрасывает этот флаг, если он достигает строки N-1
, то все подходит для вывода (мы также сбрасываем флаг=0 здесь, поэтому последовательный запуск flag==1 никогда не превышает N-1
строк):
$ cat t24.awk
BEGIN{
FS = OFS = "\t";
keywords = "polyketide synthase,methyltransferase,oxidoreductase";
N = split(keywords, keys, ",")
}
# flag==1 means we are doing regex_match the next N-1 lines
# against corresponding array element in keys from [2:N]
# once a unmatched found, turn off flag immediately
# if the flag==1 reached N-1 lines, then print the good match
flag {
if($NF ~ keys[NR - start_line + 1]) {
F = F ORS $0;
if (NR == start_line+N-1) {print F > "out_" f++; flag = 0 }
next
} else {
flag = 0;
}
}
# set up the flag/start_line and reset F
$NF ~ keys[1] { flag = 1; F = $0; start_line= NR; }
Запустите приведенный выше код с помощью awk -f t24.awk file.txt
. Вы можете настроитьkeywords
(с разделителями-запятыми )из вашей оболочки (вместо жесткого -, закодированного в блоке BEGIN
), а затем использовать -v keywords="..."
, чтобы сделать его более гибким.
С помощью правила udev и небольшого скрипта можно назначить фиксированный Mac-адрес, когда USB-модем установлен, как объясняется Mon Bloc -Notes .
Найдите серийник вашего устройства (в статье это usb0, у вас eth0 если не ошибаюсь ).
udevadm info -a -p /sys/class/net/eth0
Создайте или добавьте новое правило в /etc/udev/rules.d/90 -local.rules
ACTION=="add", DRIVERS=="usb", ATTRS{serial}=="xxxx", RUN+="/etc/udev/scripts/android"
Создать исполняемый скрипт /etc/udev/scripts/android
#!/bin/bash
ifconfig eth0 down
ifconfig eth0 hw ether 02:11:22:33:44:55
ifconfig eth0 192.168.42.1
ifconfig eth0 up
Наконец, запретите сетевому менеджеру управлять этим устройством (см. ссылку ).
Я использую buster 10.4 и, возможно, хочу предупредить, что я вообще использую NetworkManager.
Чтобы Ethernet через USB работал правильно, я добавил
g_ether
с по /etc/modules
и перезагружается с устройством, подключенным с помощью USB-кабеля.
К моему удивлению, когда я набрал
ifconfig -a
теперь было два интерфейса Ethernet -исходный интерфейс Ethernet
enp0s25
и второй интерфейс Ethernet.
enx00e02277cd85
с MAC-адресом 00:e0:22:77:cd:85
.
Я просто добавил второй интерфейс в /etc/network/interfaces
как
iface enx00e02277cd85 inet static
address 192.168.2.11
netmask 255.255.255.0
network 192.168.2.0
gateway 192.168.2.1
, где адрес шлюза — это IP-адрес устройства, к которому мне нужно получить доступ с помощью USB-кабеля -и перезагрузки.
И добавил IP-адрес в /etc/hosts, используя для удобства имя pluto.
Кроме того, если вы наберете ifconfig
в нужный момент после подключения USB-устройства, новое устройство запустится как eth0, но будет переименовано в enx00e02277cd85
.
Мое единственное требование — иметь возможность подключаться по ssh к устройству, которым является ADALM -PLUTO SDR -полнодуплексное -радиочастотное устройство.