我有这样的输入:
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 XxXXx
B 23456433 XXx
.
.
.
我知道有点perl,但我不知道如何逐行比较
非常感谢您提前
如果我们有
A 118791136 X
A 23456433 x
B 34222223 X
B 56444233 X
如何有这样的输出:
A 118791136,23456433 X,x
B 34222223,56444233 X,X
...
...
答案 0 :(得分:4)
这件作品:
$ awk '{a[$1,$2]=a[$1,$2]$3} END{for (i in a) {print i, a[i]}}' file
B118791136 x
A118791136 XxXX
B23456433 XXx
将结果存储在一个数组中,将第一个和第二个字段作为索引。最后,它打印结果。
结果为B23456433
而不是B 23456433
,试图将其拆分...... sed
使其成为:
$ 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
$ awk '{a[$1,$2]=a[$1,$2]$3} END{for (i in a) {split(i,b,SUBSEP); print b[1], b[2], a[i]}}' file
B 118791136 x
A 118791136 XxXX
B 23456433 XXx
@fedorqui是否可以添加计数器,以某种方式计算数量 列中的相同行?
$ awk '{a[$1,$2]=a[$1,$2]$3} END{for (i in a) {split(i,b,SUBSEP); print b[1], b[2], a[i], length(a[i])}}' file
B 118791136 x 1
A 118791136 XxXX 4
B 23456433 XXx 3
答案 1 :(得分:2)
这可能适合你(GNU sed):
sed -r ':a;$!N;s/^((.*)\s+\S+)\s*\2\s+/\1/;ta;P;D' file