在固定标题下抓取变量文本

时间:2016-03-02 10:28:31

标签: regex awk grep

我有一个类似下面示例的日志文件:

Pool id 1000c2
signal sizes 8
sig_conf       63     127     255     511    1663    4095    9247   65535
sig_alloc     214       8      38       1       4       0       0       0
stack sizes 8
stk_conf      256     512    1024    2048    4096    8192   16384   65536
stk_alloc       0       0       0       8       6      10       6       0
fragment info
fragment  baseaddr  lastaddr      size   sigsize   stksize   unused  watermark_used%
0         018ae000  01d72b40   5000000    651680    245760   4102560      17

Current Pool Usage Info
Total_Pool_Size  Current_Used_Pool  Current_Used_Pool%
5000000         252535                     5
blocks
30111a    2010f0    29010d0   6000c0    
$ 

我需要标题" Current_Used_Pool%"下的值。有许多这样的日志,价值各不相同,但标题保持不变。

我尝试使用awk但到目前为止失败了。请帮忙。

3 个答案:

答案 0 :(得分:1)

另一种方法:

awk '/Current_Used_Pool%/{N=NR+1;next} NR==N{print $3}'

答案 1 :(得分:1)

常见的惯用awk方法是设置/测试标志:

awk 'f{print $3;f=0} /Current_Used_Pool%/{f=1}'

有关如何打印相对于其他记录的记录的更多示例,请参阅https://stackoverflow.com/a/18409469/1745001

@slyclam我在一个不同的答案中看到你写的got syntax error awk: syntax error near line 1 awk: illegal statement near line 1 - 该错误消息意味着你正在使用旧的,破坏的awk(Solaris上的/ bin / awk)。永远不要使用awk它是,好,旧,破碎。在Solaris上使用/ usr / xpg4 / bin / awk或稍微低一点,nawk。

答案 2 :(得分:0)

You can use this awk command to search for the value under a fixed column heading:

awk -v col="Current_Used_Pool%" '$0 ~ col {
   for(i=1; i<=NF; i++)
      if ($i == col) {
         c=i
         n=NR+1
         break
      }
} NR==n {
   print $c
   exit
}' file

Output:

5