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

提取SPICE数据文件中+开头行的时间-电流数据对的awk脚本求助

提取SPICE数据文件中+开头行的时间-电流数据对的awk脚本求助

嘿,我完全懂你这种卡了半天的挫败感!SPICE输出的这种拆分多行的时间-电流数据确实有点坑,咱们来一步步把它捋顺解决掉。

首先先拆解下你的数据问题:你提供的nportModel.sp.isrc里,以+开头的行是把连续的时间-电流对拆成了多行,而且每行的字段奇偶性还不一样——第一行结尾是时间,第二行开头就是对应这个时间的电流;第二行结尾是电流,第三行开头就是对应这个电流的时间,以此类推。之前的脚本没考虑到这种跨行衔接的情况,所以才没得到预期结果。

解决思路

我们需要写一个能跨行衔接残留数值的awk脚本,核心逻辑是:

  • 只处理以+开头的行
  • 用一个变量保存上一行处理后剩下的单个数值(比如残留的时间/电流),和下一行的第一个数值组成完整的时间-电流对
  • 对每一行的字段,每两个一组提取时间-电流,剩下的单个数值继续留到下一行处理
  • 输出时统一用两位小数的科学计数法,和你预期的格式对齐

最终awk脚本

BEGIN {
    # 定义输出格式:科学计数法,保留两位小数
    OFMT = "%.2E"
    # 打印表头
    print "time\tcurrent"
}

/^+/ {
    # 把当前行的有效字段(从第2个开始,跳过开头的+)存入数组
    field_count = 0
    for (i = 2; i <= NF; i++) {
        fields[++field_count] = $i
    }

    # 如果上一行有残留的单个数值,先和当前行第一个字段组成一对输出
    if (residual != "") {
        printf "%s\t%s\n", sprintf(OFMT, residual), sprintf(OFMT, fields[1])
        # 移除已处理的第一个字段,剩下的继续处理
        for (i = 1; i < field_count; i++) {
            fields[i] = fields[i+1]
        }
        field_count--
        residual = ""
    }

    # 遍历当前字段数组,每两个一组输出时间-电流对
    for (i = 1; i <= field_count; i += 2) {
        if (i + 1 <= field_count) {
            printf "%s\t%s\n", sprintf(OFMT, fields[i]), sprintf(OFMT, fields[i+1])
        } else {
            # 剩下单个字段,作为残留值留给下一行处理
            residual = fields[i]
        }
    }
}

使用方法

  1. 把上面的脚本保存成extract_spice_data.awk文件
  2. 在终端运行以下命令:
awk -f extract_spice_data.awk nportModel.sp.isrc > output_file.txt

预期输出验证

根据你提供的示例数据,运行后output_file.txt的内容会是:

time	current
0.00E+00	1.87E+00
2.00E-11	1.09E+01
4.00E-11	1.03E+01
6.00E-11	9.14E+00
8.00E-11	8.06E+00
1.00E-10	7.25E+00
1.20E-10	6.46E+00

(注:你示例里第三行最后一个数值1.40000e-10会作为残留值保存,等后续有对应电流值的行时会自动配对输出)

脚本关键点说明

  • BEGIN块:提前设置输出格式并打印表头,确保整体格式统一
  • residual变量:核心的跨行衔接机制,解决了行与行之间拆分的时间-电流对问题
  • sprintf(OFMT, value):强制把数值转换成你需要的两位小数科学计数法格式,保证输出美观对齐

备注:内容来源于stack exchange,提问作者Santhosh Nayak D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 06:28:13