2014-10-27 107 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