множественный grep и сгруппированный вывод - PullRequest
0 голосов
/ 16 декабря 2018

input:

--------------- 1st block ----------------

info1:AAAAA

random info

random info

random info

info0:"one string"

random info

random info

[...]

info2:"2nd string"


info3:"3rd string"

random info

random info

info4:"4th string"

--------------- 2nd block ----------------

info1:BBBBB

random info

random info

random info

info0:"one string"

random info

random info

[...]

info2:"2nd string" 

info3:"3rd string"

random info

random info


info4:"4th string"

--------------- 3rd block ---------------- 

[...]

note: если info0 - это шаблон, который я ищу, я хочу получить info0, info1, info2, info3, info4

Я могу сделать grep info0 -B 4(чтобы получить info1), но я не могу сделать -A x, чтобы захватить остальные (info2,3,4), потому что количество строк может отличаться от одного блока к другому.

важно:

 -the output should be grouped by info0

-info0, info2,info3,info4 is always the same, but info1 is always unique (actually info1 is a MAC address). 

-the number of blocks is not limited (there can be 1, 2 , 3, 4,...blocks).

-subsidiary question: within the same command, do the same thing but with info0 carrying different string. For instance: 2 blocks with the same info0, then 3 blocks with another info0 and so on and so forth...

 - I put ----- #block----- in the input to facilitate lecture to the reader, but these lines do not exist in the actual input. 

желаемый результат:

info0:"one string"

info1:AAAAA

info1:BBBBB 

info2:"2nd string"

info3:"3rd string"

info4:"4th string"

что я сделал до сих пор

output | grep info0 -B 4 -A 23 | grep '\(info1\|info0\|info1\|info2\|info3\|info4\)' >> /tmp/info0

23 -> расчетное максимальное числострок одного блока

большое спасибо, ребята!

1 Ответ

0 голосов
/ 16 декабря 2018

Я нашел уродливое, но работающее решение.Допустим, я ищу info0 и вводим / tmp / input:

echo info0;grep info0 -B5 /tmp/input | grep info1;awk '/info0/{flag=1} flag; /info4/{flag=0}' /tmp/input | grep '\(info2\|info3\)' | sort -u
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...