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

AWK技术问询:输出文件中间追加文本与生成C风格数组

嘿,刚好这俩问题我都能给你捋明白,一个个来哈:

问题1:用AWK在输出文件中间追加文本

AWK是逐行处理文本的工具,要在文件中间插入内容,核心是先定位到插入点,再输出原有内容的同时插入指定文本。给你两个常用场景的实操例子:

场景1:按指定行数插入

比如要在第3行之后插入一行// 这里是追加的文本,原文件为input.txt,输出到output.txt:

awk 'NR==3 {print; print "// 这里是追加的文本"; next} 1' input.txt > output.txt

简单解释下每个部分:

  • NR==3:当处理到第3行时触发逻辑
  • print:先输出第3行本身
  • print "// 这里是追加的文本":输出要插入的内容
  • next:跳过后续默认处理,避免重复输出第3行
  • 1:AWK中1代表逻辑真,会执行默认的print $0,也就是输出所有其他行

如果要直接修改原文件,GNU AWK支持-i inplace参数直接编辑:

gawk -i inplace 'NR==3 {print; print "// 这里是追加的文本"; next} 1' input.txt

其他系统可以用临时文件中转:awk ... input.txt > temp.txt && mv temp.txt input.txt

场景2:匹配特定内容后插入

如果要在包含START关键字的行后面插入文本,把匹配条件换成正则即可:

awk '/START/ {print; print "// 追加的文本"; next} 1' input.txt > output.txt

问题2:从逗号分隔的HEX文件生成C风格数组

既然你完全不熟悉AWK,我给你写个开箱即用的脚本,再拆解开讲明白,以后你也能自己调整。

方法1:用脚本文件(更易读修改)

把下面的代码存成hex2c.awk:

BEGIN {
    print "uint8_t ee_data[] = {"
    count = 0
    line_len = 8  # 每行放8个元素,可按需修改数量
}
{
    gsub(/[ \t]/, "")  # 移除所有空格、制表符,避免干扰分割
    split($0, arr, ",")  # 按逗号分割当前行成数组
    for (i in arr) {
        if (arr[i] != "") {  # 跳过空元素(比如行尾多余的逗号)
            printf "    %s,", arr[i]
            count++
            if (count % line_len == 0) {  # 每line_len个元素换行
                print ""
            }
        }
    }
}
END {
    if (count % line_len != 0) print ""  # 最后一行没满的话补换行
    printf "};\n"
    printf "const size_t ee_data_len = %d;\n", count  # 顺便输出元素总数,方便C代码使用
}

然后运行命令生成C数组文件:

awk -f hex2c.awk EE.hex > ee_data.h

方法2:一行命令(不用存脚本)

直接在终端运行:

awk 'BEGIN{print "uint8_t ee_data[] = {"; count=0; line_len=8} {gsub(/[ \t]/,""); split($0,arr,","); for(i in arr){if(arr[i]!=""){printf "    %s,",arr[i]; count++; if(count%line_len==0) print ""}}} END{if(count%line_len!=0) print ""; printf "};\nconst size_t ee_data_len = %d;\n", count}' EE.hex > ee_data.h

生成效果示例

用你提供的输入内容,生成的C代码大概是这样:

uint8_t ee_data[] = {
    0x01,    0x00,    0x05,    0x00,    0x08,    0x1C,    0x00,    0x58,
    0x03,    0x03,    0x03,    0x03,    0x03,    0x03,    0x03,    0x03,
    0x03,    0x03,    0x03,    0x03,    0x03,    0x03,    0x03,    0x03,
    0x03,    0x03,    0x01,    0x00,    0x23,    0x00,    0x08,    0x00,
    0x00,    0x00,    0x00,    0x00,    0x00,    0x00,    0x00,    0x00,
    0x00,    0x00,    0x00,    0x00,    0x00,
};
const size_t ee_data_len = 46;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:28:22