根据相同的列值合并 2 行

Ram*_*esh 5 awk perl

我有一个像下面这样的文件。

47196436 47723284 name1 1.77273

42672249 52856963 name2 1.06061
52856963 430695 name2 1.16667

55094959 380983 name3 1.55613

17926380 55584836 name4 1.02461
3213456 34211 name4 1.11
54321 34211 name4 1.23
Run Code Online (Sandbox Code Playgroud)

前 2 列对应于我表中的主键。我试图以这样的方式合并行,如果名称相同,则所有键都将位于同一行中。

我试图获得输出,

47196436 47723284 name1
42672249 52856963 430695 name2
55094959 380983 name3
17926380 55584836 3213456 34211 54321 name4
Run Code Online (Sandbox Code Playgroud)

我能够使用以下命令部分实现它。

awk '{ x[$3]=x[$3] " " $2; } 
END { 
   for (k in x) print k,x[k] >"OUTPUT1";  
}' ccc.txt
Run Code Online (Sandbox Code Playgroud)

但是,它没有给我正确的输出。我需要一些帮助来进一步修改上述命令。

cuo*_*glm 3

一个perl办法:

$ perl -ane '$h{$F[2]} .= " ".$F[0]." ".$F[1];
    END {
        for $k (sort keys %h) {
            print $_," " for grep {!$seen{$_}++} split(" ",$h{$k});
            print "$k\n";
        }
    }' file

47196436 47723284 name1
42672249 52856963 430695 name2
55094959 380983 name3
17926380 55584836 3213456 34211 54321 name4
Run Code Online (Sandbox Code Playgroud)