2016-03-02 80 views
0

下可變文本我有一個像下面的示例日誌文件:抓住固定的標題

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,但迄今爲止失敗了。請幫忙。

回答

1

另一種方法:

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

完美。謝謝:) – slyclam

+0

雖然在這種情況下,在OPs示例數據的情況下它可能會很好,但實際上它實現的內容與OP所要求的略有不同 - 它實現了在連續出現的最後一行之後打印行,而不僅僅是在條件之後打印行。 –

0

您可以使用此awk命令固定的列標題下搜索的值:

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 

輸出:

5 
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。

+1

感謝您的鏈接。 – slyclam