Вы можете сделать это, но, очевидно, предупреждаем, что драйвер может быть не полностью совместим с вашим устройством!
Это также включает в себя перекомпиляцию модуля ядра, поэтому, если это вас беспокоит, я бы посоветовал быть осторожным. Тем более, что для большинства сетевых адаптеров требуется загрузка специального бинарного BLOB-объекта встроенного ПО, который может привести к поломке вашего оборудования, поэтому будьте осторожны и выполните небольшую домашнюю работу, чтобы найти совместимый BLOB-объект встроенного ПО.
Рады продолжить? Хорошо :)
Во-первых, вам нужно найти исходный код драйвера для работающего ядра — я полагаю, поскольку вы используете dkms, значит, он уже где-то в вашей системе.Получив это, найдите место, где зарегистрирован MODULE_DEVICE_TABLE
. Из быстрого онлайн-поиска, например, в файле r8169.c есть такой раздел:
static const struct pci_device_id rtl8169_pci_tbl[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8129), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8136), 0, 0, RTL_CFG_2 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8161), 0, 0, RTL_CFG_1 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8167), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8168), 0, 0, RTL_CFG_1 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8169), 0, 0, RTL_CFG_0 },
{ PCI_VENDOR_ID_DLINK, 0x4300,
PCI_VENDOR_ID_DLINK, 0x4b10, 0, 0, RTL_CFG_1 },
{ PCI_DEVICE(PCI_VENDOR_ID_DLINK, 0x4300), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(PCI_VENDOR_ID_DLINK, 0x4302), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(PCI_VENDOR_ID_AT, 0xc107), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(0x16ec, 0x0116), 0, 0, RTL_CFG_0 },
{ PCI_VENDOR_ID_LINKSYS, 0x1032,
PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 },
{ 0x0001, 0x8168,
PCI_ANY_ID, 0x2410, 0, 0, RTL_CFG_2 },
{0,},
};
MODULE_DEVICE_TABLE(pci, rtl8169_pci_tbl);
Так вот здесь ядру говорят, что если будет найдено устройство с любым из перечисленных идентификаторов PCI, то использовать этот драйвер . Вам нужно будет добавить в эту структуру дополнительную строку, содержащую идентификатор устройства PCI вашей сетевой карты, перекомпилировать (надеюсь, просто с помощью dkms) и перезапустить.
[Это основано на ваших -текущих -примерных данных, разделенных пробелами]
Вы можете использовать срез массива в perl
, выбирая индексы, используя grep
и некоторую арифметику по модулю:
perl -anle 'print join "\t", $F[0], @F[grep { !($_ % 4 - 1) } 1..$#F]' file
sed -E 's/(,[^,]*)(,[^,]*){3}/\1/g' yourfile.txt
сохранит столбцы 1,2,6,10,14,18 и так далее. Я надеюсь, это то, что вы ожидаете.
В вашем вопросе не хватает деталей. Я предполагаю, что это что-то найдено либо в текстовом файле, либо в канале.
Быстрое и грязное использование фильтрующих столбцов было быawk
Поскольку ваш вопрос является базовым, я сосредоточусь на нем :
.$ echo "1,2,3,4,5,6,7,8,9,10" |awk -F, '{print $1 "," $2 "," $6 "," $10;}'
1,2,6,10
-F,
требуется для объявления запятой в качестве разделителя полей. $0
будет весь ввод $1
первый столбец $2
второй
...
Если ваши входные данные отличаются от вашего примера, пожалуйста, будьте более конкретными.
Для решения на основе awk -:
awk -v FS=, -v OFS=, '{ printf $1; for(i=2;i<=NF;i+=4) { printf OFS $i }; print "";}' marwah.input