You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于@@id字段检索指定数据并提取对应字段的值

实现方案

方案1:单awk命令实现(推荐,鲁棒性更高)

直接用awk一次完成ID匹配、字段提取,不需要多管道接力,适配字段值含特殊字符的场景,还支持忽略大小写匹配字段名,完整脚本如下:

#!/bin/bash
# usage: search.sh <id> <field>
# eg: search 123 age

search_id="$1"
target_field="$2"

awk -v id="$search_id" -v field="$target_field" '
# 匹配对应ID所在的行
$0 ~ "^@@id: " id {
    # 按@@分割行内容为独立的键值对块
    split($0, kv_pairs, /@@/)
    for (i in kv_pairs) {
        current = kv_pairs[i]
        # 忽略大小写匹配目标字段
        if (tolower(current) ~ "^" tolower(field) ": ") {
            # 截取冒号后的字段值输出
            sub(/^[^:]+: /, "", current)
            print current
            exit
        }
    }
}' sample

执行chmod +x search.sh后运行./search.sh 123 gender即可输出预期结果Male。

方案2:补全你原有grep逻辑的管道部分

如果你不想改动原有grep的写法,在管道后加一行sed即可实现提取:

grep "^@@id: ${search}" sample | sed -E "s/.*@@${field}: ([^@]+).*/\1/I"

末尾的I参数代表忽略字段名大小写匹配,如果要求字段名大小写完全对应,删除I即可。该方案仅适用于字段值不含@字符的场景。


内容的提问来源于stack exchange,提问作者Kalib Zen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:45:07