当行不匹配时,从两个文件中的列添加值

时间:2016-12-01 23:48:53

标签: shell awk paste

我有两个文件有一些常见的列,很少有没有,我正在尝试添加与公共列关联的列,如下所示:

 paste file1 file2
M246_0.6.motif_CBS_count    15023   M246_0.6.motif_CBS_count    15767
M247_0.6.motif_CBS_count    15023   M247_0.6.motif_CBS_count    15767
M250_0.6.motif_CBS_count    8483    M250_0.6.motif_CBS_count    8815
M254_0.6.motif_CBS_count    12921   M254_0.6.motif_CBS_count    13435
M256_0.6.motif_CBS_count    36045   M256_0.6.motif_CBS_count    39390
M261_0.6.motif_CBS_count    6339    M260_0.6.motif_CBS_count    2
M262_0.6.motif_CBS_count    1026    M261_0.6.motif_CBS_count    6523
M269_0.6.motif_CBS_count    47      M262_0.6.motif_CBS_count    863
M271_0.6.motif_CBS_count    7162    M269_0.6.motif_CBS_count    57
M272_0.6.motif_CBS_count    2245    M271_0.6.motif_CBS_count    8218
M273_0.6.motif_CBS_count    159     M272_0.6.motif_CBS_count    2459

请注意,file2包含文件1没有的M260,我想要的是a)从具有公共column1的两个文件中添加column2并保留不常见的列,因为它们是

 M246_0.6.motif_CBS_count   30790
 M247_0.6.motif_CBS_count   30790
 M250_0.6.motif_CBS_count   17298
 M254_0.6.motif_CBS_count   26356
 M256_0.6.motif_CBS_count   75435
 M260_0.6.motif_CBS_count   2
 M261_0.6.motif_CBS_count   72862   
 M262_0.6.motif_CBS_count   1889    
 M269_0.6.motif_CBS_count   104    
 M271_0.6.motif_CBS_count   15380
 M272_0.6.motif_CBS_count   10463 
 M272_0.6.motif_CBS_count   2459
 M273_0.6.motif_CBS_count   159     

1 个答案:

答案 0 :(得分:1)

您可以尝试使用gawk,特定于gawk的功能PROCINFO(如果输出顺序无关紧要,请删除此行)

awk '{d[$1]+=$2}
     END{
         PROCINFO["sorted_in"] = "@ind_str_asc"; 
         for(k in d){ print k, d[k] }
     }' file1 file2

你明白了,

M246_0.6.motif_CBS_count 30790
M247_0.6.motif_CBS_count 30790
M250_0.6.motif_CBS_count 17298
M254_0.6.motif_CBS_count 26356
M256_0.6.motif_CBS_count 75435
M260_0.6.motif_CBS_count 2
M261_0.6.motif_CBS_count 12862
M262_0.6.motif_CBS_count 1889
M269_0.6.motif_CBS_count 104
M271_0.6.motif_CBS_count 15380
M272_0.6.motif_CBS_count 4704
M273_0.6.motif_CBS_count 159