2013-04-22 105 views
0

我有一个命令输出如下的一堆行 第一个数字是第二个数字代表关键字。 我想能够解析关键字2 3和5 输入Bash解析特定行命令的分段输出

11 
12 
13 
14 
15 
\n 
\n 
\n 
21 
22 
23 
24 
25 
\n 
\n 
\n 
(2 more sections as such) 

输出

12 
13 
15 
\n 
22 
23 
25 
\n 
(continues for other 2 sections) 

grep的给我(等)。 我不太确定如何用awk来完成它。 我的最终目标是将其放入解析部分(或行)的输出转到临时文件的脚本中。

回答

0

AWK与设置RS

awk '{while(++i<=NF)if($i~/[235]$/)print $i;i=0;print ""}' RS="" file 

输出:

12 
13 
15 

22 
23 
25 

编辑

awk '/^\s*$/{a[NR];if(!(NR-1 in a))print} /[235]$/{print}' file 
+0

所以在这种情况下,它说[235]是我在哪里设置关键值?这将如何工作的文字? – DwarfCode 2013-04-23 21:17:51

+0

那么你需要给你的文字的匹配标准。只要正则表达式可以匹配您所需的文本,该行就可以工作。 – Kent 2013-04-23 22:20:23

+0

我喜欢这个代码的问题是,它只打印我正在寻找的不是整行的单词。有没有办法改变这种行为? – DwarfCode 2013-04-30 16:35:11

0

这里有一个办法:

$ awk '$1~/[235]$/{p=1;print}!$1&&p{p=0;print}' file 
12 
13 
15 

22 
23 
25 

到记录只有一个换行符分隔标志p时,我们设置p,当我们打印时,在第一块比赛,当我们到达第一个空白在每条记录之后行,即!$1我们打印空白行并取消设置标志,以便忽略接下来的两行。

+0

如果我改变[235]单词将它仍然工作?最后的文件就是我正在阅读的文件。是否有可能将命令输出到此? – DwarfCode 2013-04-23 21:19:17

+0

你可以做任何你喜欢的正则表达式匹配,并且是管道不是问题。 – 2013-04-23 21:42:03