awk начинает печать, когда соответствие шаблону прекращает печать, когда найден второй шаблон

Я пытаюсь использовать awk , чтобы сопоставить шаблон, распечатать определенные столбцы и остановиться, когда он найдет другой узор.

Например

У меня есть файл, который содержит следующее:

Enter-PSSession -ComputerName ACD-VMH04 -Credential afornito

Name       State   CPUUsage(%) MemoryAssigned(M) Uptime     Status
----       -----   ----------- ----------------- ------     ------
ACD-CMS03  Running 0           4096              9.14:40:30 Operating normally
ACD-FFS01  Running 0           8192              9.14:31:22 Operating normally
ACD-FS01   Running 0           3072              9.14:31:28 Operating normally
ACD-WP01   Running 15          4096              9.14:31:33 Operating normally
ACP-DEV-01 Running 0           4096              9.14:31:13 Operating normally
VMDEV01    Running 0           2048              9.14:31:48 Operating normally

Get-VMProcessor |  Select-Object VMName, Count

VMName                                                                                                            Count
------                                                                                                            -----
ACD-CMS03                                                                                                             2
ACD-FFS01                                                                                                             1
ACD-FS01                                                                                                              2
ACD-WP01                                                                                                              2
ACP-DEV-01                                                                                                            2
VMDEV01                                                                                                               2

Get-VMMemory

VMName     DynamicMemoryEnabled Minimum(M) Startup(M) Maximum(M)
------     -------------------- ---------- ---------- ----------
ACD-CMS03  False                512        4096       1048576
ACD-FFS01  False                512        8192       1048576
ACD-FS01   False                512        3072       1048576
ACD-WP01   False                512        4096       1048576
ACP-DEV-01 False                512        4096       1048576
VMDEV01    True                 2048       2048       4096

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

Каждый файл такой же, насколько макет, поэтому первый запускается просто

awk 'NR>=5&&NR<=10 {print $1, $2, $4, $5}' stats.txt

Чего я не хочу, так это части «<= 10», что я могу использовать для остановки, когда вместо этого он видит «Get-VMProcessor»?

Вторая часть, как я могу начать печать при обнаружении «Select-Object VMName, Count» пропускает 3 строки и печатает, пока не найдет «Get-VMMemory».

0
30.03.2017, 22:22
2 ответа

Существует ряд приемов.

Если вы хотите просто остановить обработку, когда увидите «Get-VMProcessor», вы можете выйти:

awk '/Get-VMProcessor/ { exit }; NR>=5 { print $1, $2, $4, $5 }' stats.txt

Более общим решением является использование флага вывода:

awk 'NR == 5 { output = 1 }; /Get-VMProcessor/ { output = 0 }; output { print $1, $2, $4, $5 }' stats.txt

Вы можете объединить это со строкой запуска для обработки ваш второй блок:

awk 'NR == 5 { output = 1 }; /Get-VMProcessor/ || /Get-VMMemory/ { output = 0 }; /Select-Object VMName, Count/ { output = 1; start = NR + 4 }; output && NR >= start { print $1, $2, $4, $5 }' stats.txt
1
28.01.2020, 04:47

awk имеет встроенный шаблон старт-стоп:

awk '/startpattern/,/stoppattern/'
awk '/Name/,/Get-VMProcessor/'
1
20.04.2020, 22:42

Теги

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