Seguramente la respuesta es simplemente
awk -F,0 'NF<5' file.csv
Use un delimitador de ",0" y cuando el número de campos sea inferior a 5, realice la acción predeterminada que es imprimir.
Lo probé en este archivo
gene,v1,v2,v3,v4,v5,v6,v7
gene1,0,1,5,0,0,4,100
gene2,1,0,0,0,5,210,2
gene3,0,0,0,0,6,0,0
gene4,0,0,0,4,6,0,0
gene5,0,1,0,4,6,0,0
Lo que arrojó este resultado
gene,v1,v2,v3,v4,v5,v6,v7
gene1,0,1,5,0,0,4,100
gene2,1,0,0,0,5,210,2
Вот моя трассировка (дайте мне знать, если я ошибаюсь)
питание _запись _файл ()https://elixir.bootlin.com/linux/v4.10/source/drivers/pci/hotplug/pci_hotplug_core.c#L95
slot->ops->disable_slot(slot);
ops->disable_slot = disable_slot;
https://elixir.bootlin.com/linux/v4.10/source/drivers/pci/hotplug/pciehp_core.c#L107
static int disable_slot(struct hotplug_slot *hotplug_slot)
{
struct slot *slot = hotplug_slot->private;
return pciehp_sysfs_disable_slot(slot);
}
https://elixir.bootlin.com/linux/v4.10/source/drivers/pci/hotplug/pciehp_core.c#L167
retval = pciehp_disable_slot(p_slot);
remove_board(struct slot *p_slot)
https://elixir.bootlin.com/linux/v4.10/source/drivers/pci/hotplug/pciehp_ctrl.c#L135
наконец, мы получили:
void pciehp_power_off_slot(struct slot *slot)
{
struct controller *ctrl = slot->ctrl;
pcie_write_cmd(ctrl, PCI_EXP_SLTCTL_PWR_OFF, PCI_EXP_SLTCTL_PCC);
ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__,
pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL,
PCI_EXP_SLTCTL_PWR_OFF);
}
https://elixir.bootlin.com/linux/v4.10/source/drivers/pci/hotplug/pciehp_hpc.c#L551
#define PCI_EXP_SLTCTL_PWR_OFF 0x0400 /* Power Off */
#define PCI_EXP_SLTCTL 24 /* Slot Control */
0x0400 ==> 10000000000 #бит 10 == 1 ==> Регистр управления контроллером мощности равен 1 в регистре управления слотом (смещение 18h == 24)
в соответствии со спецификацией PCIe о регистре управления контроллером питания:
0b Power On
1b Power Off
следовательно, да,
ядро изменит регистр управления контроллером питания в регистре управления слотом.