合并多个文件的列,同时根据不同的列匹配顺序,并为缺失的值添加0

问题描述 投票:1回答:1

我想用怪异的方式合并多个文件。

假设这是我的文件之一:

1     group1
5     group5
6     group9
10     group3
2     group10

这是另一个文件:

0.1     group3
3     group5
52     group2
11     group4
8     group10

我想将这些文件合并成一个新文件,以便得到:

       File1     File2
group1     1     0
group2     0     52
group3     10     0.1
group4     0     11
group5     5     3
group9     6     0
group10     2     8

所以:-列中的值基于另一列中的注释进行组合。-如果文件缺少给定注释的值,则它将为“ 0”。-文件名成为标题,“注释”成为新文件中的行名。

是否有使用bash脚本执行此操作的方法(或其他便捷方法)?我有成千上万个这样的文件,因此手动选择确实不是一种选择...

非常感谢!

Edit:我想我可以按照以下步骤操作:1)我列出了所有可能的注释。对于每个文件(在每个文件上重复),我可以检查是否存在注释,如果不存在,则可以在文件中插入新行:

0     annotation

2)我可以按字母顺序对每个文件进行排序3)然后,我可以将它们全部合并到一个文件中(并以某种方式在此处找出标题)]

有人对这些步骤有任何想法吗?

bash shell file unix data-processing
1个回答
0
投票

这里是一种方式:

awk 'FNR==1 { ++n }
{ a[$2,n]=$1;b[$2] }
END {
  for (c in b) {
    for (i=1;i<=n;i++)
      $i=((c,i) in a?a[c,i]:0)
    $1=(c OFS $1)
    print
  }
}' file1 file2 file3 ...

将第二个字段加上命令行的文件索引与数组中的第一个字段一起使用,并在另一个数组中保留唯一的批注作为参考,以便我们可以遍历第一个数组。

© www.soinside.com 2019 - 2024. All rights reserved.