Извлечение соответствия, где есть соответствие ниже в наборе строк файлов - PullRequest
0 голосов
/ 13 сентября 2018

У меня большой текстовый файл.Комбинация building и name в одном разделе файла является уникальной, но они могут быть разделены многими строками (переменная).Как мне получить все значения «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"

...

1 Ответ

0 голосов
/ 13 сентября 2018
$ 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...