本文介绍了比较行和打印相同的值相同的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样一个输入:

  A 118791136点¯x
一118791136点¯x
一118791136点¯x
一118791136点¯x
乙118791136点¯x
乙23456433点¯x
乙23456433点¯x
乙23456433点¯x



我想将其转换为输出,如:

  A 118791136 XXXXX
乙23456433 XXX



我知道一点点的Perl,但我不知道如何行比较行

非常感谢你提前

如果我们有

  A 118791136点¯x
一23456433点¯x
乙34222223点¯x
乙56444233点¯x

怎么可能有这样的输出:

  A 118791136,23456433 X,X
乙34222223,56444233 X,X
...
...


解决方案

这件使得它:

  $ AWK'{a [$ 1,$ 2] = A [$ 1,$ 2] $ 3} END {为(我的){打印I,A [I]}}'文件
B118791136点¯x
A118791136 XXXX
B23456433 XXX

只是存储在一个数组的结果,其第一和第二场为指标。最后,它打印的结果。

结果给出 B23456433 而不是 B 23456433 ,试图分裂它... sed的使得它:

  $ AWK'{a [$ 1,$ 2] = A [$ 1,$ 2] $ 3} END {为(我的){打印I,A [I]}}'文件| SED的/ \\([A-Z] \\)/ \\ 1 /'
乙118791136点¯x
一118791136 XXXX
乙23456433 XXX

根据

  $ AWK'{a [$ 1,$ 2] = A [$ 1,$ 2] $ 3} END {为(我的){拆分(I,B,SUBSEP);印片B [1],B [2],A []}}'文件
乙118791136点¯x
一118791136 XXXX
乙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], length(a[i])}}' file
B 118791136 x 1
A 118791136 XxXX 4
B 23456433 XXx 3

这篇关于比较行和打印相同的值相同的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-18 13:40