2014-10-27 102 views
0

我嘗試解析一個日誌文件,用下面的代碼:分析日誌文件使用awk

if [[ $line -match "=====.*" ]]; then 
     awk $2 = $vFiler; 
     echo "$vFiler"; 

說明:

有開始喜歡=====或「體積/圖案線條.. 。'後跟一個名字 我想找到所有以=====或'vol/...'開頭的行,並將後面的字符串設置爲等於一個變量,但我真的很努力地做到這一點,我想到了一個帶有awk的if命令(我知道 - 匹配不是真正的命令)。

輸入如下:

===== vfiler0 
/vol/vol0 

===== vFiler1 
/vol/vol1 

輸出應該是:

vFiler, Type 
vFiler0, /vol/vol0 
vFiler1, /vol/vol1 

你們可以幫助我嗎?我試圖在bash腳本中做到這一點 是否有可能得到它像我以上試過的「if ...」?

+2

提供一些輸入和預期輸出的例子。 – anubhava 2014-10-27 12:28:18

+2

你甚至知道awk是如何工作的嗎?這應該寫成什麼語言? – 2014-10-27 12:30:00

+0

===== vfiler0 /vol/vol0 ===== vFiler1 – howdoesthiswork 2014-10-27 12:30:43

回答

0

我會用以下內容:

awk -v RS="=====" -v OFS="," 'BEGIN {print "vFiler", "Type" } NF{print $1, $2}' file 

它返回:

vFiler,Type 
vfiler0,/vol/vol0 
vFiler1,/vol/vol1 

我們做的是設置記錄分隔爲=====。這樣,每次都會處理一塊====。然後,只要有至少一個字段(NF),我們就會打印第一個和第二個字段。

+1

非常感謝,沒想到它會使用單個awk命令 – howdoesthiswork 2014-10-27 13:17:19

1
awk '/=====/{print $2}' inputFile 

會給作爲

vfiler0 
vFiler1 
+0

是否可以通過if [if]來完成?因爲我想檢查更多的東西,而不僅僅是===== – howdoesthiswork 2014-10-27 12:44:00

+1

@howdoesthiswork:是的,可以在awk中檢查更多的東西 - 如果你好奇的話,看看awk是如何工作的:http:// www.cs.princeton.edu/courses/archive/spring13/cos333/awk.help – marbu 2014-10-27 12:51:28

+0

@marbu謝謝,相當有用 – howdoesthiswork 2014-10-27 13:07:48

0

這是否幫助輸出?

grep -Po '^={5}\s+\K.*' file 
+0

對不起,我沒有寫在我的問題...但它可以做到這一點如果[ ...]?因爲我想檢查更多的東西,而不僅僅是首先要做的===== – howdoesthiswork 2014-10-27 12:46:03

+1

@howdoesthiswork,請寫出完整的需求。 – Kent 2014-10-27 12:46:50

+0

對不起..已編輯我的問題 – howdoesthiswork 2014-10-27 12:49:13