我有一个类似下面示例的日志文件:
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但到目前为止失败了。请帮忙。
答案 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