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你想看吗