bash - bash/awk:合并多个文件后删除重复的列
问题描述
我正在使用在我的 bash 脚本中编写的以下函数,以便将许多文件(包含多列数据)合并到一个包含所有融合数据的大摘要图表中
table_fuse () {
paste -d'\t' "${rescore}"/*.csv >> "${rescore}"/results_2PROTS_CNE_strategy3.csv | column -t -s$'\t'
}
以两个文件为例,此例程将生成以下连接图表作为合并的结果:
# file 1. # file 2
Lig dG(10V1) dG(rmsd) Lig dG(10V2) dG(rmsd)
lig1 -6.78 0.32 lig1 -7.04 0.20
lig2 -5.56 0.14 lig2 -5.79 0.45
lig3 -7.30 0.78 lig3 -7.28 0.71
lig4 -7.98 0.44 lig4 -7.87 0.42
lig5 -6.78 0.28 lig5 -6.75 0.31
lig6 -6.24 0.24 lig6 -6.24 0.24
lig7 -7.44 0.40 lig7 -7.42 0.39
lig8 -4.62 0.41 lig8 -5.19 0.11
lig9 -7.26 0.16 lig9 -7.30 0.13
由于这两个文件共享相同的第一列(Lig),如何在每个 fused 文件中删除(替换为“”)该列的所有重复,同时仅保留第一个 CSV 中的 Lig 列?
解决方案
编辑:根据 OP 的评论,[Ll]ig
在文件中添加以下解决方案[Ll]ig0123
。[Ll]ig(abcd)
awk '{first=$1;gsub(/[Ll]ig([0-9]+)?(\([-azA-Z]+\))?/,"");print first,$0}' Input_file
考虑awk
到您只想在lig(digits)
此处删除重复值,您可以尝试以下操作。
awk '{first=$1;gsub(/[Ll]ig([0-9]+)?/,"");print first,$0}' Input_file
说明:为上述添加详细说明。
awk ' ##Starting awk program from here.
{
first=$1 ##Setting first column value to first here.
gsub(/[Ll]ig([0-9]+)?/,"") ##Globally substituting L/lig digits(optional) with NULL in whole line.
print first,$0 ##printing first and current line here.
}
' Input_file ##mentioning Input_file name here.
推荐阅读
- c# - CRM 中的重复记录
- asp.net - 每次在 MVC Entity Framework 中使用不同的机器时是否需要重新生成模型..?
- reactjs - 状态减少后 Redux 组件没有重新渲染
- python - flask/jinja2:表单文本输入设置值
- graph-theory - 如何知道在gremlin中从一个顶点遍历到另一个顶点时遇到的顶点数
- python - 通过 psycopg2 确定异常类型
- amazon-web-services - 如何使用 SSM 上的 send_command 在 EC2 上异步执行批处理程序?
- java - 在eclipse中执行AWS命令
- javascript - 如何以百分比接收图像的值
- r - 调度一个 R 脚本,在 Windows 上出现错误时显示一个弹出/消息框