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

如何用AWK预处理多列能量分解数据以适配柱状图绘制

能量分解数据转两列格式的AWK脚本优化

问题背景

处理多列能量分解分析数据时,需要转换为两列格式用于柱状图绘制,具体需求:

  • 将第一列(Residue)的连续空格替换为下划线,如SER 1改为SER_1
  • 移除最后一列(TOTAL)的误差信息,如0.000 +/- 0.001改为0.000

原AWK脚本因TOTAL列包含误差信息,导致数值判断条件($8 > 0.005)无法生效,且未完成格式转换。

原数据示例

| Run on Thu Oct 20 14:59:37 2022
|| GB non-polar solvation energies calculated with gbsa=2
idecomp = 1: Per-residue decomp adding 1-4 interactions to Internal.
Energy Decomposition Analysis (All units kcal/mol): Generalized Born solvent

DELTAS:
Total Energy Decomposition:
Residue |  Location |       Internal      |    van der Waals    |    Electrostatic    |   Polar Solvation   |    Non-Polar Solv.  |       TOTAL
-------------------------------------------------------------------------------------------------------------------------------------------------------
SER   1 | R SER   1 |    0.000 +/-  0.000 |   -0.000 +/-  0.000 |   -0.092 +/-  0.012 |    0.092 +/-  0.012 |    0.000 +/-  0.000 |    0.000 +/-  0.001
GLY   2 | R GLY   2 |    0.000 +/-  0.000 |   -0.000 +/-  0.000 |    0.001 +/-  0.001 |   -0.001 +/-  0.001 |    0.000 +/-  0.000 |    0.000 +/-  0.001

原脚本

awk -F "|"  '
    BEGIN {
        print "@TYPE bar"
    }
    NR > 9 && $8 > 0.005 { print $1, $8 }
' $file > output_data.dat

原输出问题:保留了误差信息,第一列未替换空格,数值判断逻辑失效。

解决方案

修改后的AWK脚本:

awk -F "|"  '
    BEGIN {
        print "@TYPE bar"
    }
    NR > 9 {
        # 处理第一列:替换连续空格为下划线,清理首尾多余下划线
        gsub(/[[:space:]]+/, "_", $1)
        gsub(/^_+|_+$/, "", $1)
        # 处理第八列:拆分出主数值,剔除误差部分
        split($8, total_parts, /[[:space:]]+\+\/-/)
        total_val = total_parts[1]
        # 清理数值前后空白
        gsub(/^[[:space:]]+|[[:space:]]+$/, "", total_val)
        # 筛选绝对值大于0.005的条目(可按需调整)
        if (total_val > 0.005 || total_val < -0.005) {
            printf "%-10s %s\n", $1, total_val
        }
    }
' $file > output_data.dat

脚本说明

  1. 第一列格式修正:用gsub把连续空格替换为下划线,再去除首尾多余的下划线,得到SER_1的规范格式。
  2. 第八列数值提取:通过split按+/-分割字符串,提取第一部分作为纯数值,确保后续判断基于有效数值。
  3. 数值判断优化:调整为判断绝对值大于0.005的条目(可根据需求修改阈值),避免因负数值被遗漏。
  4. 对齐输出:用printf控制列宽,保证输出格式规整,适配柱状图数据要求。

期望输出示例

@TYPE bar
SER_1      0.000
GLY_2      0.000
PHE_3      0.000
ARG_4      0.003
LYS_5      0.019
...
VAL_18     -0.058

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:45:41