重击:如果表格中的元素相同,则将表格的第一列合并

时间:2019-10-02 07:52:33

标签: bash shell awk

我有一张这样的桌子:

N1.txt N04_28  31022   39154   t1-8133/8133     
N1.txt N04_28  40504   47604   1-7101/7101    
N1.txt N05_159 1       6348    t1-6348/8133     
N1.txt N05_159 7698    14798   1-7101/7101     
N2.txt N06_30  1       6490    t1-6490/8133    
N2.txt N06_30  7840    14940   1-7101/7101    
N3.txt N07_170 1       6285    t1-6285/8133     
N4.txt N07_170 7635    14735   t1-7101/7101     

我只想查看第一列,如果该行包含相同的字符串,我想将这些行合并为一行。 输出应该是这样的:

    N1.txt N04_28  31022   39154   t1-8133/8133   N04_28  40504   47604   1-7101/7101 N05_159 1       6348    t1-6348/8133   N05_159 7698    14798   1-7101/7101    
    N2.txt N06_30  1       6490    t1-6490/8133   N06_30  7840    14940   1-7101/7101   
    N3.txt N07_170 1       6285    t1-6285/8133     
    N4.txt N07_170 7635    14735   t1-7101/7101  

我可以用awk做到这一点,但是我的技能有限。 我看了看this question,它们看起来很相似,但是如果我用/@/

更改/*.txt/,它将绑定所有内容

我一遍又一遍地做这些事情,我真的很想学习如何正确有效地做这些事情。 谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用awk

awk 'BEGIN{ PROCINFO["sorted_in"]="@ind_str_asc" } {
    s=$0
    sub(/^[[:blank:]]*[^[:blank:]]+[[:blank:]]+/, "", s)
    a[$1] = (a[$1] == "" ? "" : a[$1] OFS) s
}
END {
   for (i in a) print i, a[i]
}' file | column -t

N1.txt  N04_28   31022  39154  t1-8133/8133  N04_28  40504  47604  1-7101/7101  N05_159  1  6348  t1-6348/8133  N05_159  7698  14798  1-7101/7101
N2.txt  N06_30   1      6490   t1-6490/8133  N06_30  7840   14940  1-7101/7101
N3.txt  N07_170  1      6285   t1-6285/8133
N4.txt  N07_170  7635   14735  t1-7101/7101
相关问题