Bash 合并具有相同名称的多行表

Bash 合并具有相同名称的多行表,bash,Bash,我有一个制表符分隔的表,我想更改其格式,如下所示 最初文件是这样的 Species Column1 Column2 Column3 A 3 B 1 C 7 D 1 A 8 D

我有一个制表符分隔的表,我想更改其格式,如下所示

最初文件是这样的

 Species    Column1    Column2    Column3
A           3                   
B           1
C           7                        
D           1                        
A                      8            
D                      4             
B                      2             
C                      5             
A                                9    
我想要的是:

 Species    Column1    Column2    Column3
A           3          8          9 
B           1          2
C           7          5              
D           1          4              
目前我有:

 Species    Column1    Column2    Column3
A           3
A                      8
A                                 9
B           1          
B                      2
C           7   
C                      5       
D           1                       
D                      4             
我使用了sort函数来获取底部表格,但不确定如何将这些行组合在一起。有人知道如何使用吗?

使用此脚本:

#!/bin/bash
cols=4
nums=$(seq $cols)
files=$(printf "f%s " $nums)

for i in $nums
do
  if [ $i = 1 ]; then
    tail -n +2 $1 | cut -f"$i" | grep '^.' | cut -d' ' -f1 | sort -u > f"$i"
  else
    tail -n +2 $1 | cut -f"$i" | grep '^.' | cut -d' ' -f1 > f"$i"
  fi
done
head -n1 $1
paste $files
rm -rf $files
输出为:

$ ./script file 
Species Column1 Column2 Column3
A   3   8   9
B   1   4   
C   7   2   
D   1   5   

假设列由选项卡分隔,并且没有标题,脚本如下:

awk -F "\t" '$2' file.txt | sort  > col2.txt
awk -F "\t" '$3' file.txt | sort  > col3.txt
awk -F "\t" '$4' file.txt | sort  > col4.txt
join -a1 -a2 col2.txt col3.txt | join -a1 -a2 - col4.txt

这个解决方案似乎可以很好地处理示例数据,但当用于具有13列(我更改了cols=4部分)和大约200行的样本时,输出文件将所有数字聚集到顶部,而较低的数字没有任何数字,尽管它们应该有。有没有可能的解决办法?