Получите последний набор непустых строк

Драйверы очень похожи на любую другую программу, они могут состоять из нескольких исходных файлов. Драйверы устройств Linux могут быть непосредственно скомпилированы в ядро или модуль ядра. Модули ядра обладают преимуществом способности, которая будет загружена динамично (т.е. Вы не должны компилировать новое ядро для использования их).

Можно, очевидно, всегда смотреть на исходный код Linux, но это может быть грандиозной задачей сначала. Однако как с чем-либо в драйверах Linux файлы. Это означает, что другие программы получают доступ к ним через интерфейс VFS. Например, можно управлять CD-ROM через ioctl() вызовы с помощью его файла устройств.

Я настоятельно рекомендовал бы проверку Драйверов устройств Linux. Это в свободном доступе и ответит на Ваши вопросы. В частности, можно прочитать главу 2, которая показывает Вам, как создать простое "Привет, Ядро" модуль. Это может быть намного больше, чем Вы просите, но можно считать остатки, которыми Вы интересуетесь. И его свободное.; P

2
01.08.2015, 22:01
3 ответа

Можно использовать awkрежим абзаца (когда RS является пустой строкой). Тем путем каждый "набор" является одной записью, и можно легко распечатать последний.

iostat -d 1 2 | awk -vRS= 'END{print}'
6
27.01.2020, 21:49
  • 1
    +1, Just Works(TM). Избегать проблем с более пустыми строками, возможно RS="\n\n+" было бы полезно? –  l0b0 17.03.2011, 12:53
  • 2
    , более эффективный для помещения RS присвоение в BEGIN блок. –  glenn jackman 17.03.2011, 12:56
  • 3
    Лучше сделайте это awk -vRS= 'END{print}'. Во-первых, потому что "\n\n" версия распечатает пустую запись, если будет больше чем две пустых строки в конце входа. Во-вторых, потому что некоторые версии awk не позволяют RS быть больше чем одним символом. Пустое RS означает “режим абзаца”, где любая последовательность двух или больше новых строк разделяет записи, и это требуется POSIX. –  Gilles 'SO- stop being evil' 17.03.2011, 22:23

perl -00 хороший путь состоит в том, чтобы прочитать один абзац за один раз, таким образом, последний абзац:

perl -00 -ne '$para = $_; END {print $para}'
4
27.01.2020, 21:49

С sed :

sed '/^$/{$!{N;/\n$/D;s/.//;$!h;$p;d};};//!{H;1h;$!d};$x' infile

это должно напечатать последний набор непустых строк без каких-либо начальных / конечных пустых строк.
например.

iostat -d 1 2 | sed '/^$/{       # if the line is empty
$!{                              # and if it's not the last line
N                                # then pull in the next line
/\n$/D                           # if also empty, delete up to \n, restart cycle
s/.//                            # otherwise delete leading \newline 
$!h                              # copy over hold space if not last line
$p                               # or print pattern space if last line
d                                # then delete pattern space
}
}
//!{                             # if the line isn't empty
H                                # append it to hold space
1h                               # if it's the first line, overwrite hold space
$!d                              # if it's not the last line, delete it
}
$x                               # on the last line, exchange buffers
'
2
27.01.2020, 21:49

Теги

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