Извлечение полей данных из нескольких строк

Если вы не знаете, что означает «перекомпилировать ядро» и «применить исправление», вам следует прочитать другие -связанные с Linux/Unix книги, в которых рассматриваются более общие темы, вместо того, чтобы тратить время на попытки получить знания из книга, посвященная разработке ядра Linux, например «Программирование модулей ядра Linux» Питера Джея Зальцмана.

Я предлагаю вам следующие книги (извините, если этот пост выглядит как AD )чтобы начать свое путешествие, чтобы получить знания о том, как работать с Unix -как ОС:

  • Руководство по системному администрированию UNIX и Linux, 4-е издание Эви Немет (Автор ), Гарт Снайдер (Автор ), Трент Р. Хейн (Автор ),Бен Уэйли (Автор)
  • Как работает Linux :Что должен знать каждый суперпользователь Брайан Уорд
  • Собор и базар :Размышления о Linux и открытом исходном коде случайного революционера Эрика С. Рэймонда
1
02.07.2020, 13:33
1 ответ

Здесь хорошо подходят как awk, так и python. Оба они поддерживают ассоциативные массивы (или словари ), и оба имеют встроенные регулярные выражения -.

Возможно, есть какой-то общий подход к ним, но я обычно оптимизирую, основываясь на фактических входных/выходных данных, с которыми я могу играть. Вот ваша проблема statрешена с помощью awk.

$ cat kv.awk 
/File:/ {
    f = $2
}

/Size:/ {
    info[f] = $2
}

/Access.*Uid/ {
    gsub(/\(|\/.*/, "", $2)
    info[f] = info[f] OFS $2
}

END {
    for (k in info) {
        print "VerifyFile(\"" k "\"", info[k] ");"
    }
}

Имя файла используется в качестве ключа , чтобы сохранить вместе все, что с ним связано. В конце вы можете отобразить результаты в любом нужном вам формате. GNU awkтакже поддерживает многомерные массивы.

Вот пример запуска:

$ stat ip.txt test.txt > file.txt

$ awk -v OFS=', ' -f kv.awk file.txt
VerifyFile("'test.txt'", 254, 0664);
VerifyFile("'ip.txt'", 301, 0664);

Чтобы изучить awk, я бы рекомендовал https://www.gnu.org/software/gawk/manual/gawk.html, который охватывает GNU awk, а также упоминает подробности о других реализациях.

1
18.03.2021, 23:22

Теги

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