将参数传递到awk内,用shell脚本提取符合条件的行

本文介绍如何通过shell脚本结合awk命令,从XML格式的数据中筛选出符合条件的行。作者分享了最终实现的脚本,用于处理包含特定decimal值的文本行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要从如下格式中用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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值