как извлечь определенные столбцы

Вы можете сделать это, но, очевидно, предупреждаем, что драйвер может быть не полностью совместим с вашим устройством!

Это также включает в себя перекомпиляцию модуля ядра, поэтому, если это вас беспокоит, я бы посоветовал быть осторожным. Тем более, что для большинства сетевых адаптеров требуется загрузка специального бинарного 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) и перезапустить.

0
11.05.2017, 00:16
4 ответа

[Это основано на ваших -текущих -примерных данных, разделенных пробелами]

Вы можете использовать срез массива в perl, выбирая индексы, используя grepи некоторую арифметику по модулю:

perl -anle 'print join "\t", $F[0], @F[grep { !($_ % 4 - 1) } 1..$#F]' file
1
28.01.2020, 02:19
sed -E 's/(,[^,]*)(,[^,]*){3}/\1/g' yourfile.txt

сохранит столбцы 1,2,6,10,14,18 и так далее. Я надеюсь, это то, что вы ожидаете.

0
28.01.2020, 02:19

В вашем вопросе не хватает деталей. Я предполагаю, что это что-то найдено либо в текстовом файле, либо в канале.

Быстрое и грязное использование фильтрующих столбцов было бы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второй
...

Если ваши входные данные отличаются от вашего примера, пожалуйста, будьте более конкретными.

3
28.01.2020, 02:19

Для решения на основе awk -:

awk -v FS=, -v OFS=, '{ printf $1; for(i=2;i<=NF;i+=4) { printf OFS $i }; print "";}' marwah.input
1
28.01.2020, 02:19

Теги

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