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行的样本时,输出文件将所有数字聚集到顶部,而较低的数字没有任何数字,尽管它们应该有。有没有可能的解决办法?