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

awk如何使用二维或同类数组存储#行间字段并生成指定格式输出

你可以按下面的逻辑实现需求,不需要提前缓存所有块的头信息,边读取边处理即可:

awk '
/^#/ {
    # 遇到新的块头,先输出上一个块的所有内容
    if (na > 0) {
        printf "##### %s %s #####\n", curr_a, curr_b
        print curr_b "_" curr_a
        print curr_a "_" curr_b
        for (v=0; v<val_cnt; v++) {
            print val[v], curr_a
            print val[v], curr_b
        }
    }
    # 初始化当前块的参数
    curr_a = $2
    curr_b = $3
    na++
    val_cnt = 0
    delete val
    next
}
# 处理非块头行,将$1存入当前块的value数组
{
    val[val_cnt++] = $1
}
# 处理最后一个块(最后一个块后没有新的块头触发输出,需要单独处理)
END {
    printf "##### %s %s #####\n", curr_a, curr_b
    print curr_b "_" curr_a
    print curr_a "_" curr_b
    for (v=0; v<val_cnt; v++) {
        print val[v], curr_a
        print val[v], curr_b
    }
}
' input

注:你给出的期望输出中存在几处疑似手误:第一个块的DEFG被写为DFG、第二个块的SQW被写为SQF,上面的代码会按输入文件中的原始值输出,如果你确实需要做截断/修改字符的特殊处理,可以在赋值curr_b的位置增加对应的逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:36:03