как распечатать новую строку в awk

Необходимо будет, вероятно, добавить правило UDEV обнаружить это присутствие устройств. После того как устройство обнаруживается, UDEV может создать соответствие /dev/sdb1 соглашаться с ним.

Эти документы от OpenSUSE должны запустить Вас в создании этого правила.

Относительно Вашего вопроса:

"..., но разве я не должен мочь найти родительский узел в/sys для этого? И я ничего не могу найти..."

Я ожидал бы это, если ядро успешно обнаружило /dev/sdb1, который это имеет, так как Вы вкладываете те сообщения Ваш dmesg журнал, затем у Вас были бы соответствующие записи под /sys.

Я занялся бы расследованиями /sys более тщательно, там вероятно дескриптор устройства, скрывающийся там, который соответствует /dev/sdb1. Можно идти вокруг дерева с помощью этой команды: udevadm info -a -p /sys/class/... необходимо будет прибавить соответствующее устройство вместо точек (...).

Пример

$ udevadm info -a -p /sys/class/ata_device/dev1.0 

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/link1/dev1.0/ata_device/dev1.0':
    KERNEL=="dev1.0"
    SUBSYSTEM=="ata_device"
    DRIVER==""
    ATTR{gscr}==""
    ATTR{class}=="ata"
    ATTR{ering}=="[4294667.658000000]Unknown"
    ATTR{spdn_cnt}=="0"
    ATTR{pio_mode}=="XFER_UDMA_7, XFER_UDMA_6, XFER_UDMA_5, XFER_UDMA_4, XFER_MW_DMA_4, XFER_PIO_6, XFER_PIO_5, XFER_PIO_4, XFER_PIO_3, XFER_PIO_2, XFER_PIO_1, XFER_PIO_0"
    ATTR{dma_mode}=="XFER_UDMA_7, XFER_UDMA_6, XFER_UDMA_5, XFER_UDMA_4, XFER_UDMA_3, XFER_UDMA_2, XFER_UDMA_1, XFER_UDMA_0, XFER_MW_DMA_4, XFER_MW_DMA_3, XFER_MW_DMA_2, XFER_SW_DMA_2, XFER_PIO_6, XFER_PIO_5, XFER_PIO_4, XFER_PIO_3, XFER_PIO_2"
    ATTR{xfer_mode}=="XFER_UDMA_7, XFER_UDMA_6, XFER_UDMA_5, XFER_UDMA_4, XFER_UDMA_3, XFER_UDMA_2, XFER_UDMA_1, XFER_UDMA_0, XFER_MW_DMA_4, XFER_MW_DMA_3, XFER_MW_DMA_2, XFER_SW_DMA_2, XFER_PIO_6, XFER_PIO_5, XFER_PIO_4, XFER_PIO_3, XFER_PIO_2"

  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/link1/dev1.0':
    KERNELS=="dev1.0"
    SUBSYSTEMS==""
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/link1':
    KERNELS=="link1"
    SUBSYSTEMS==""
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1':
    KERNELS=="ata1"
    SUBSYSTEMS==""
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1f.2':
    KERNELS=="0000:00:1f.2"
    SUBSYSTEMS=="pci"
    DRIVERS=="ahci"
    ATTRS{irq}=="40"
    ATTRS{subsystem_vendor}=="0x17aa"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x010601"
    ATTRS{consistent_dma_mask_bits}=="64"
    ATTRS{dma_mask_bits}=="64"
    ATTRS{local_cpus}=="00000000,00000000,00000000,0000000f"
    ATTRS{device}=="0x3b2f"
    ATTRS{msi_bus}==""
    ATTRS{local_cpulist}=="0-3"
    ATTRS{vendor}=="0x8086"
    ATTRS{subsystem_device}=="0x2168"
    ATTRS{numa_node}=="-1"
    ATTRS{d3cold_allowed}=="1"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

2
02.10.2014, 23:59
4 ответа

попробуйте

 awk '/mail:|fullName:/{s=s", "$0} /uid:/ {s=s", "$0 "\n" ;} END{printf substr(s,3)}' dump2.txt

, если в поле нет%

​​другое решение

 awk '/mail:|fullName:/{s=s", "$0} /uid:/ {print substr(s,3) ", "$0 ;s=""} ' dump2.txt

при условии, что uid: последний.

1
27.01.2020, 22:05

вам просто нужно добавить \ n в желаемое место:

awk '/mail:|fullName:|uid:/{s=s", "$0}\n END{print substr(s,3)}' dump2.txt
1
27.01.2020, 22:05

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

awk '$1=="mail:" || $1=="fullName:" {printf "%s, ", $0} $1=="uid:"' dump2.txt
1
27.01.2020, 22:05

Примечание: все нижеприведенное (очевидно) предполагает, что строка uid: всегда будет последним в каждой группе. Однако все они работают с символами % в данных.

Если вы хотите сохранить все данные и распечатать их в конце, вот несколько простой подход с использованием массивов:

awk 'BEGIN {count=0}
     /mail:|fullName:|uid:/ {s[count] = s[count] ", " $0} /uid:/ {count++}
     END {for (i=0; i<count; i++) print substr(s[i],3)}' dump2.txt

Если вы хотите иметь возможность обрабатывать поля индивидуально (в конце), используйте двумерный массив:

awk 'BEGIN {count=0}
     /mail:|fullName:|uid:/ {s[count][$1] = $0} /uid:/ {count++}
     END {for (i=0; i<count; i++) printf "%s, %s, %s\n",
                s[i]["mail:"], s[i]["fullName:"], s[i]["uid:"]}' dump2.txt

(Как и ответ Гленна, здесь предполагается, что строки mail: , fullName: и uid: отображаются как первое поле в строке.)

Я не знаю, что вы имели в виду, когда упомянули выравнивание, но отсюда легко выровнять поля в выводе:

awk 'BEGIN {count=0}
     /mail:|fullName:|uid:/ {s[count][$1] = $0} /uid:/ {count++}
     END {for (i=0; i<count; i++) printf "%23s, %23s, %s\n",
                s[i]["mail:"], s[i]["fullName:"], s[i]["uid:"]}' dump2.txt

      mail: (скрытый) fullName: Bogus Bogus, uid: 666
      почта: (скрыто) fullName: Bogus2 Bogus2, uid: 667
     
или
awk 'BEGIN {count=0}
     /mail:|fullName:|uid:/ {s[count][$1] = $0} /uid:/ {count++}
     END {for (i=0; i<count; i++) printf "%-23s, %-23s, %s\n",
                s[i]["mail:"], s[i]["fullName:"], s[i]["uid:"]}' dump2.txt

     mail: (скрыто), полное имя: Bogus Bogus, uid: 666
    почта: (скрыто), полное имя: Bogus2 Bogus2, uid: 667
     
или
awk 'BEGIN {count=0}
     /mail:|fullName:|uid:/ {s[count][$1] = $0} /uid:/ {count++}
     END {for (i=0; i<count; i++) printf "%-23s %-24s %s\n",
                                    s[i]["mail:"] ",",
                                    s[i]["fullName:"] ",",
                                    s[i]["uid:"]}' dump2.txt

     mail: (скрыто) fullName: Bogus Bogus, uid: 666
    почта: (скрыто) fullName: Bogus2 Bogus2, uid: 667
     

Этот ответ показывает, как определить максимальную длину данных для каждого поля.

0
27.01.2020, 22:05

Теги

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