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

时间:2014-05-26 14:01:14

标签: bash

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

最初文件就像这样

 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函数来获取底部表但不确定如何将行组合在一起。谁知道怎么做?

2 个答案:

答案 0 :(得分:0)

使用此脚本:

#!/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   

答案 1 :(得分:0)

假设列由制表符分隔且没有标题,则脚本为:

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