R 比较行并打印相同行的相同值

R 比较行并打印相同行的相同值,r,perl,awk,R,Perl,Awk,我有这样一个输入: A 118791136 X A 118791136 x A 118791136 X A 118791136 X B 118791136 x B 23456433 X B 23456433 X B 23456433 x . . . A 118791136,23456433 X,x B 34222223,56444233 X,X ... ... 我想将其转换为如下输出: A 118791136 XxXXx B 23456

我有这样一个输入:

A  118791136  X 
A  118791136  x 
A  118791136  X 
A  118791136  X 
B  118791136  x 
B  23456433   X 
B  23456433   X
B  23456433   x
.
.
.
A 118791136,23456433 X,x
B 34222223,56444233 X,X
...
...
我想将其转换为如下输出:

A  118791136  XxXXx
B  23456433   XXx
.
.
.
我懂一点perl,但我不知道如何逐行比较

事先非常感谢

如果我们有

A  118791136  X 
A  23456433   x
B  34222223   X
B  56444233   X  
如何获得如下输出:

A  118791136  X 
A  118791136  x 
A  118791136  X 
A  118791136  X 
B  118791136  x 
B  23456433   X 
B  23456433   X
B  23456433   x
.
.
.
A 118791136,23456433 X,x
B 34222223,56444233 X,X
...
...
这件作品是:

$ awk '{a[$1,$2]=a[$1,$2]$3} END{for (i in a) {print i, a[i]}}' file
B118791136 x
A118791136 XxXX
B23456433 XXx
$ awk '{a[$1,$2]=a[$1,$2]$3} END{for (i in a) {print i, a[i]}}' file | sed 's/\([A-Z]\)/\1 /'
B 118791136 x
A 118791136 XxXX
B 23456433 XXx
只需将结果存储在一个数组中,将第一个和第二个字段作为索引。最后,它打印结果

结果是B23456433而不是B23456433,尝试将其拆分。。。sed提出:

$ awk '{a[$1,$2]=a[$1,$2]$3} END{for (i in a) {print i, a[i]}}' file
B118791136 x
A118791136 XxXX
B23456433 XXx
$ awk '{a[$1,$2]=a[$1,$2]$3} END{for (i in a) {print i, a[i]}}' file | sed 's/\([A-Z]\)/\1 /'
B 118791136 x
A 118791136 XxXX
B 23456433 XXx
更新基于 根据新评论进行更新 @fedorqui是否可以添加一个计数器,以某种方式计算 列中有相同的行吗


这可能适用于GNU sed:

sed -r ':a;$!N;s/^((.*)\s+\S+)\s*\2\s+/\1/;ta;P;D' file

您已获得我的+1,但不需要sed。正确的方法是使用awk'{a[$1,$2]=a[$1,$2]$3}END{fork in a{splitk,b,subsp;print b[1],b[2],a[k]}'file@fedorqui你能告诉我哪本书《AWK编程教程》能帮助我学习这些东西吗?@sudo_O uhms,谢谢,我不知道有这样的选择。更新@我主要是从玛丽亚姆萨尼那里学到的,提问和回答:另外,对于苏多奥推荐给我的一些技巧也很有帮助。@MaryamSani你想看吗