У меня есть следующий список данных:
Account Number: 11111
Domain : domain.com
Quantity: 1
Quantity: 2
Processor: Intel Xeon E5-1650 V2 3.5GHZ, Hexa Core
SERVERCHASSIS: Standard - Single PSU - No Hot Swap Bays
Account Number: 54321
Domain : domain0.com
Quantity: 1
Processor: Intel Xeon E3-1240 V1 3.3Ghz, Quad Core
SERVERCHASSIS: Standard - Single PSU - No Hot Swap Bays
Quantity: 1
Account Number: 12345
Domain : domain1.com
Quantity: 1
Я хотел бы использовать sed / awk для удаления всех записей «Количество: X», за которыми не следует «Процессор:» в следующей строке. Я также хотел бы удалить строки «Номер учетной записи: XXXXX» и «Домен:», если следующие строки не содержат одновременно «Количество: X» и «Процессор:». Это, в свою очередь, изменит приведенные выше данные на:
Account Number: 11111
Domain : domain.com
Quantity: 2
Processor: Intel Xeon E5-1650 V2 3.5GHZ, Hexa Core
SERVERCHASSIS: Standard - Single PSU - No Hot Swap Bays
Account Number: 54321
Domain : domain0.com
Quantity: 1
Processor: Intel Xeon E3-1240 V1 3.3Ghz, Quad Core
SERVERCHASSIS: Standard - Single PSU - No Hot Swap Bays
Может ли кто-нибудь предоставить способ выполнить эту задачу с помощью sed или awk или их комбинации?
2 ответа
$ cat tst.awk
BEGIN{ RS=""; FS="\n" }
/Quantity:/ && /Processor:/ {
for (i=1; i<=NF; i++) {
if ( ! (($i ~ /Quantity:/) && ($(i+1) !~ /Processor:/)) ) {
print $i
}
}
print ""
}
$
$ awk -f tst.awk file
Account Number: 11111
Domain : domain.com
Quantity: 2
Processor: Intel Xeon E5-1650 V2 3.5GHZ, Hexa Core
SERVERCHASSIS: Standard - Single PSU - No Hot Swap Bays
Account Number: 54321
Domain : domain0.com
Quantity: 1
Processor: Intel Xeon E3-1240 V1 3.3Ghz, Quad Core
SERVERCHASSIS: Standard - Single PSU - No Hot Swap Bays
РЕДАКТИРОВАТЬ: Эрф ... Надо было прочитать вопрос, прежде чем отвечать.
Надеюсь, это должно сработать
BEGIN {
OFS=RS
FS="\n"
RS= ""
}
{
selected = 0
drop = 0
for (i = 1; i <= NF ; i++)
{
if ($i ~ "Quantity:")
{
if ($(i+1) ~ "Processor:") selected = 1
else drop++
}
$i = $(i+drop)
}
if (selected) print
}
Cmd
gawk -f processor.awk processor.txt
Выход
Account Number: 11111
Domain : domain.com
Quantity: 2
Processor: Intel Xeon E5-1650 V2 3.5GHZ, Hexa Core
SERVERCHASSIS: Standard - Single PSU - No Hot Swap Bays
Account Number: 54321
Domain : domain0.com
Quantity: 1
Processor: Intel Xeon E3-1240 V1 3.3Ghz, Quad Core
SERVERCHASSIS: Standard - Single PSU - No Hot Swap Bays
Похожие вопросы
Новые вопросы
regex
Регулярные выражения предоставляют декларативный язык для сопоставления шаблонов в строках. Они обычно используются для проверки, синтаксического анализа и преобразования строк. Поскольку регулярные выражения не полностью стандартизированы, все вопросы с этим тегом должны также включать тег, определяющий применимый язык программирования или инструмент.