2013-03-12 136 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 2013-03-12 18:54:09

+0

'grep'是面向行的,所以你需要的不仅仅是'grep'来解决问题。你有没有考虑写一个简短的脚本来解析文件呢? – nneonneo 2013-03-12 18:56:22

+0

@ Tuxdude - 我尝试使用猫foo.txt | grep'Notification:445 \ | Mode:'但是它返回所有的模式,但是我想立即通知Mode的值!你能帮忙吗? – karunakar 2013-03-12 18:57:46

回答

1

如果我理解你想要正确的东西,这样的事情可能工作:

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

至少应该工作给你给出的例子。如果你要处理disabled或其他任何除enabled,那将使它更复杂一点......

+0

@ twalberg-谢谢你的回答。这是通知工作。我无法对正在返回所有模式的书签使用相同的命令...您能帮忙吗?还有,如果所有的都启用了呢?我们如何能够返回所有这些值?谢谢。 – karunakar 2013-03-12 20:58:54

+0

根据你给出的例子,该命令应该打印所有三个。它通过记住任何包含单词'enabled'的行的第一个单词来工作,当一行与'Mode:'匹配时,它会打印记忆单词和'Mode'行的最后一个字段。当然,如果你的实际输入不是真的那样,你的结果会有所不同。 – twalberg 2013-03-12 21:02:51

+0

@ twalberg-谢谢! – karunakar 2013-03-12 21:23:25

0

假设foo.txt的,我们要提取包含每3行的第一个和最后一个字6 “基团” 的由\ n炭表达式的空间分离,其使用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 

HTH