2013-03-12 5 views
0

Скажем, у меня есть имя файла foo.txt и содержит следующую информацию.Grep для слова после сопоставления рисунка и печати

Notification are enabled 
Notification:445 
Mode: valid 
Bookmark are enabled 
Bookmarks:556 
Mode: Invalid 
Question are enabled 
Question:667 
Mode: Unknown 

Я хочу grep/awk/sed информацию ниже. мне нужен результат, как

    "Notification is Valid" 
        "Bookmark is Invalid" 
        "Question is Unknown" 

Если вам нужно что-нибудь еще, пожалуйста, дайте мне знать. Спасибо.

+0

Не могли бы вы показать нам, что вы пробовали до сих пор? – Tuxdude

+0

'grep' ориентирован на линию, поэтому вам нужно больше, чем просто' grep' для решения проблемы. Вы рассматривали возможность написания короткого сценария для синтаксического анализа файла? – nneonneo

+0

@ Tuxdude-I пробовал использовать cat foo.txt | grep 'Notification: 445 \ | Mode:', но он возвращает все Режимы, но мне нужно немедленное значение параметра Notification! Не могли бы вы помочь? – karunakar

ответ

1

Если я понять, что вы хотите правильно, что-то подобное может работать:

awk '/enabled/{g=$1}/Mode:/{printf "%s is %s\n",g,$NF}' foo.txt 

По крайней мере, должны срабатывать, к примеру, вы дали. Если вам нужно иметь дело с disabled или что-то еще, кроме enabled, это сделает его немного сложнее ...

+0

@ twalberg- Спасибо, что ответили. Это работает для уведомления. Я не могу использовать ту же команду для закладки, которая возвращает все режимы ... Можете ли вы помочь? А также, если все включено? и как мы можем вернуть все эти ценности? Благодарю. – karunakar

+0

Эта команда должна, учитывая приведенный вами пример, распечатать все три из них. Он работает, запоминая первое слово любой строки, содержащее слово «enabled», а затем, когда строка соответствует «Mode:», она печатает запоминающееся слово и последнее поле строки «Режим». Конечно, если ваш фактический вход не выглядит таким, ваши результаты будут отличаться. – twalberg

+0

@ twalberg-Спасибо! – karunakar

0

Предположим foo.txt, и мы хотим извлечь 1-е и 3-е слова из каждых 3 строк, которые содержат 6 "группа" из разделенного пространства \ п выражений полукокса, используя xargs:

xargs -n6 < foo.txt 

"линеаризует" содержание, и дает:

Notification are enabled Notification:445 Mode: valid 
Bookmark are enabled Bookmarks:556 Mode: Invalid 
Question are enabled Question:667 Mode: Unknown 

трубы этому контент AWK:

xargs -n6 < foo.txt | awk '{print $1" is "$6}' 

это дает что-то, я думаю, закрыт на то, что вы ищете:

Notification is valid 
Bookmark is Invalid 
Question is Unknown 

НТН

Смежные вопросы