foo
指示函数名称的开始,并且bar是 该块结束的符号。所以我想搜索单词“foo”,提取下一个单词(函数名称) ,然后搜索param2和 只提取值。
随着一些假设,如果你的日志文件看起来像下面然后
要么
$ cat mylog
foo function1 para1=abc para2=def para3=ghi bar foo function2 para1=jkl para2=mno para3=pqr bar
:或断行
$ cat mylog
foo function1 para1=abc para2=def para3=ghi bar
foo function2 para1=jkl para2=mno para3=pqr bar
输出
$ awk -F'[ =]' '{for(i=1;i<=NF;i++)if($i=="foo")print $(i+1),$(i+5) }' mylog
function1 def
function2 mno
如果万一你的para2
是不是为了你可以使用这个
$ awk -F'[ =]' '{f=""; for(i=1;i<=NF;i++){if($i=="foo")f=$(i+1); if(f && $i=="para2")print f,$(i+1)}}' mylog
这是awk如何看到记录的字段与-F'[ =]'
With -F'[ =]' awk would see fields in record like below
foo function1 para1=abc para2=def para3=ghi bar
^^ ^ ^^ ^
1 2 3 4 5 6
i (i+1) (i+5)
说明
awk -F'[ =]' ' # Set field separator space and =
{
# Loop through no of fields in record,
# NF gives no of fields in current record
for(i=1;i<=NF;i++)
# If field equal to foo then
if($i=="foo")
# print next(i+1) and 5th(i+5) field from current field index
print $(i+1),$(i+5)
}
' mylog # input file
如果你真正的输入是另一回事,请邮寄输入和预期输出
在日志文件中,bar和foo之间是否存在换行符? –
不是在foo和bar之间,而是在下一个foo - bar块之间 – Simi
在输入文件的开始和结尾是否真的有双引号? –