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

AWK多列数据后处理脚本修改需求:移除文件名_cl_x.x后缀并添加CSV首行注释

调整后的脚本方案

我帮你优化了bash脚本,同时实现添加CSV注释首行和移除文件名中_cl_x.x部分这两个需求,下面是两种实现方式,你可以根据习惯选择:

方式1:将文件名处理整合到AWK中(更高效,减少管道调用)

# 先写入CSV首行注释,用>覆盖确保是第一行
echo "# ${experiment}.CSV" > "${home}/${experiment}.csv"

# 用AWK一次性完成文件名处理和内容提取
awk '-F, *' '{
    if (FNR == 2) {
        # 复制文件名到临时变量进行修改
        fname = FILENAME
        # 移除文件路径
        sub(/.*\//, "", fname)
        # 移除.txt扩展名
        sub(/\.txt$/, "", fname)
        # 移除_cl_开头的版本号部分(匹配_cl_+数字+小数点)
        sub(/_cl_[0-9.]+/, "", fname)
        # 按格式输出
        printf("%s| %s \n", fname, $5)
    }
}' "${tmp}"/*.txt >> "${home}/${experiment}.csv"

方式2:保留原有SED管道,添加新的替换规则

如果你更习惯用SED处理字符串,可以在原有命令基础上新增一个SED规则:

# 先写入首行注释
echo "# ${experiment}.CSV" > "${home}/${experiment}.csv"

# 原有AWK逻辑不变,修改SED命令添加新替换
awk '-F, *' '{if(FNR==2) printf("%s| %s \n", FILENAME,$5) }' "${tmp}"/*.txt |
sed -e 's|/Users/gleb/Desktop/scripts/clusterizator/tmp/||' \
    -e 's|\.txt||' \
    -e 's/_cl_[0-9.]*//' >> "${home}/${experiment}.csv"

效果验证

执行后生成的CSV文件内容会完全符合你的要求:

results.CSV

lig177| -0.1400
lig331| -8.0000
lig394| -4.3600
lig420| -5.5200
lig550| -4.3200

关键修改说明

  1. 首行注释:用echo单独写入注释行,使用>覆盖文件确保它是第一行,避免追加导致的顺序问题;
  2. 文件名清理:
    • 方式1中用AWK的sub()函数三次处理文件名,分别移除路径、扩展名和_cl_x.x部分;
    • 方式2中新增SED规则s/_cl_[0-9.]*//,匹配_cl_后跟随的任意数字和小数点组合并删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:54:08