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

如何用bash/awk实现多文件合并后移除重复的Lig列(仅保留首个文件的Lig列)

解决重复Lig列的问题

我明白你的需求——合并多个CSV后,只保留第一个文件的Lig列,把后续所有文件的重复Lig列内容清空。你的当前table_fuse函数有个小问题:paste的输出直接追加到文件后,column命令其实没有处理到任何内容(因为输出已经被写入文件了),我们需要调整流程,同时加入awk来处理重复列。

修改后的函数代码

table_fuse () {
  paste -d'	' "${rescore}"/*.csv | awk -F'	' '
    BEGIN {OFS="	"}  # 确保输出分隔符也是制表符
    {
      # 从第4列开始,每3列清空一次(对应后续每个文件的Lig列)
      for (i=4; i<=NF; i+=3) {
        $i = ""
      }
      print $0
    }' | column -t -s$'	' >> "${rescore}"/results_2PROTS_CNE_strategy3.csv
}

代码解释

  1. paste合并文件:还是用你原来的逻辑,把所有CSV文件按制表符横向合并。
  2. awk处理重复列:
    • 指定制表符为输入/输出分隔符,保证格式一致。
    • 循环从第4列开始(对应第二个文件的Lig列),每3列执行一次清空操作(因为你的每个输入CSV都是3列:Lig + 两个dG列),这样就能精准定位后续所有文件的Lig列并清空内容。
  3. column格式化对齐:处理后的内容再用column做格式化,让输出的表格更整齐。
  4. 写入目标文件:最后把处理后的结果追加到目标CSV中。

处理后的效果

用你给出的两个文件例子,执行后会得到如下结果:

Lig    dG(10V1)  dG(rmsd)  dG(10V2)  dG(rmsd)
lig1   -6.78     0.32                -7.04     0.20
lig2   -5.56     0.14                -5.79     0.45
lig3   -7.30     0.78                -7.28     0.71
lig4   -7.98     0.44                -7.87     0.42
lig5   -6.78     0.28                -6.75     0.31
lig6   -6.24     0.24                -6.24     0.24
lig7   -7.44     0.40                -7.42     0.39
lig8   -4.62     0.41                -5.19     0.11
lig9   -7.26     0.16                -7.30     0.13

如果你的CSV文件列数有变化,只需要调整awk循环里的步长(比如每个文件是4列,就把i+=3改成i+=4)即可。

内容的提问来源于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 14:37:38