需要从如下格式中用shell脚本提取符合条件的行,终于搞定,自我庆贺一下
text [ decimal] text: message
最终的脚本实现如下
#!/bin/bash
function help() {
cat <<EOF
Usage: Invoke ". pick.bmsg.sh match-string bmsg-output-file" from your shell to pick matched messages to ouput stdout:
- match-string: key-string to match
- bmsg-output-file: a filename created by bmsg processing logcat and dmesg
EOF
echo ""
}
vfilename=""
vmatchtmp=""
if [ -f $1 ]; then
vfilename=$1
vmatchtmp=$2
else
if [ -f $2 ]; then
vfilename=$2
vmatchtmp=$1
else
help
exit 0;
fi
fi
if test x"$vmatchtmp" = x; then
help
exit 0;
fi
awk -v vmatchstr=$vmatchtmp '{ \
#_xml_p = index($0, "<"); # get start marker
#if (_xml_p == 0) return 0; # end of file (or malformed input)
linetext=$0;
lbrac=match(linetext, /\[/); #get start bracket
if (lbrac == 0) exit 0;
rbrac=match(linetext, /\]/); #get right bracket
if (rbrac == 0) exit 0;
linetime=substr(linetext, lbrac + 1, rbrac - lbrac - 1);
posi=index(linetext, vmatchstr);
#posi=index(linetext, "SystemServer");
if (posi != 0) {
subline = substr(linetext, posi);
colon = index(subline, ":");
if (colon > 0) {
outline = substr(subline, colon + 1);
printf("%s, %s\n", linetime, outline);
}
}
}' $vfilename