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
相关产品推荐
相关产品推荐

