Извлечение совпадений, где есть совпадение ниже, в наборе строк файлов

У меня большой текстовый файл. Комбинация строительство и имя в одном разделе файла уникальна, но они могут быть разделены многими строками (переменная). Как мне получить все значения «name» для данного «здания»? Предположим, я знаю, сколько «имен» существует для каждого «здания».

Я могу (скажем, есть 7 «имен» в файле для этого здания) это, чтобы увидеть 10 строк раньше и получить все «имя» для «здания», но это нелегко разобрать для очень большого файла.

cat filename |grep -m 7 -B 10 "building1"

Пример файла ниже (если формат неверный, воспользуйтесь этой ссылкой) https://docs.google.com/document/d/1HuingqaWvKl677SilRST2pNhmenQZ6-g7AaiO2FRW0Q/edit

name: "Name1"
something1: "ViewMessage1" 
something2: "ViewMessage2"
texttext
texttext
texttext
building: "building1"
name: "Name2"
something1: "ViewMessage1"
something2: "ViewMessage2"
texttext
texttext
texttext
texttext
texttext
texttext
building: "building1"
texttext
texttext
texttext
name: "Name3"
something1: "ViewMessage1"
something2: "ViewMessage2"
building: "building1"
texttext
texttext
texttext
name: "Name4"
something1: "ViewMessage1"
something2: "ViewMessage2"
texttext
texttext
texttext
texttext
building: "building2"

Ожидаемый результат

Name1, Name2, Name3: "building1"
Name4: "building2"

...

Всегда ли имя стоит перед зданием?

Adam 13.09.2018 18:27

Это правильно. «имя» всегда предшествует соответствующему «зданию». Между ними может быть ноль предложений

Sony Mitto 13.09.2018 18:51

Возможный дубликат Как найти шаблоны в нескольких строках с помощью grep?

Nissa 13.09.2018 19:25

@StephenLeppik нет, это не дублирование, и ни одно из решений, опубликованных для этого вопроса, не ответит на этот вопрос.

Ed Morton 13.09.2018 22:04
0
4
42
1

Ответы 1

$ awk -F'(: *)?"' '{f[$1]=$2} $1=="building" && $2=="building1"{print f["name"]}' file
Name1
Name2
Name3

$ awk -F'(: *)?"' '
    { f[$1]=$2 }
    $1=="building" { names[$2]=($2 in names ? names[$2] ", " : "") f["name"] }
    END { for (bldg in names) print names[bldg] ": \"" bldg "\"" }
' file
Name1, Name2, Name3: "building1"
Name4: "building2"

Другие вопросы по теме