Как использовать awk для добавления пропущенных строк в группы строк - PullRequest
0 голосов
/ 09 октября 2018

Привет всем и извините за простой вопрос, у меня есть список текстовых файлов со спецификациями ПК, из которых я пытаюсь извлечь данные.Используя:

awk '/Disk\:/ && !/USB/ ||FNR==1 {c++;if(FNR==1)c=0;print c " " $0}'  *.txt > file

Я могу извлечь номер и модель диска для каждой системы следующим образом:

0 SYSTEM
1 Disk: ATA WDC WD5000AAKX-0 SCSI Disk Device (465,8 GB)
0 SYSTEM
1 Disk: ST3160815AS (149,0 GB)
0 SYSTEM
1 Disk: WDC WD5003AZEX-00MK2A0 (465,8 GB)
2 Disk: WDC WD5003AZEX-00MK2A0 (465,8 GB)
3 Disk: WDC WD40EFRX-68WT0N0 (3,6 TB)

Каждая система может иметь до четырех дисков, и я пытаюсь сделать следующее:добавьте недостающие строки, чтобы я мог преобразовать файл в CSV в будущем.Требуемый результат будет следующим:

0 SYSTEM
1 Disk: ATA WDC WD5000AAKX-0 SCSI Disk Device (465,8 GB)
2 Disk: NO DISK
3 Disk: NO DISK
4 Disk: NO DISK
0 SYSTEM
1 Disk: ST3160815AS (149,0 GB)
2 Disk: NO DISK
3 Disk: NO DISK
4 Disk: NO DISK
0 SYSTEM
1 Disk: WDC WD5003AZEX-00MK2A0 (465,8 GB)
2 Disk: WDC WD5003AZEX-00MK2A0 (465,8 GB)
3 Disk: WDC WD40EFRX-68WT0N0 (3,6 TB)
4 Disk: NO DISK

Я искал форумы и нашел оба примера, которые добавляют недостающие строки и групповые строки по n, но не сумели как-то объединить их.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 09 октября 2018

Это обновление вашего оригинального скрипта.Он сохраняет ту же логику с небольшим обновлением.

awk '(NR!=1) && (FNR==1) { for(c++;c<=4;++c) { print c" Disk: NODISK" }}
     (FNR==1) { c=0; print c,$0 }
     /Disk\:/ && !/USB/ { print ++c,$0 }
     END{ for(c++;c<=4;++c) { print c" Disk: NODISK" }}' *txt
  • Первая строка: Если мы введем новый файл, но не первый файл, напечатайте отсутствующие диски
  • Вторая строка: Если мы введем новый файл, установите c=0 и напечатайте строку (это печатает 0 SYSTEM)
  • Последняя строка: Если строка содержит слово DISK, но не слово USB, увеличьте c и напечатайте строку.
  • Когда мы закончим, напечатайте отсутствующие диски дляпоследний файл
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...