源文本格式如下:

7ffff74c8000 7ffff74df000 r-xp 00000000 08:05 10952716 /lib/libpthread-2.11.2.so
7ffff74df000 7ffff76de000 ---p 00017000 08:05 10952716 /lib/libpthread-2.11.2.so
7ffff76de000 7ffff76df000 r--p 00016000 08:05 10952716 /lib/libpthread-2.11.2.so
7ffff76df000 7ffff76e0000 rw-p 00017000 08:05 10952716 /lib/libpthread-2.11.2.so
7ffff76e4000 7ffff771c000 r-xp 00000000 08:05 9132825  /usr/lib/libapr-1.so.0.4.2
7ffff771c000 7ffff791b000 ---p 00038000 08:05 9132825  /usr/lib/libapr-1.so.0.4.2
7ffff791b000 7ffff791c000 r--p 00037000 08:05 9132825  /usr/lib/libapr-1.so.0.4.2
7ffff791c000 7ffff791d000 rw-p 00038000 08:05 9132825  /usr/lib/libapr-1.so.0.4.2
7ffff791d000 7ffff793f000 r-xp 00000000 08:05 9132829  /usr/lib/libaprutil-1.so.0.3.9
7ffff793f000 7ffff7b3f000 ---p 00022000 08:05 9132829  /usr/lib/libaprutil-1.so.0.3.9
7ffff7b3f000 7ffff7b40000 r--p 00022000 08:05 9132829  /usr/lib/libaprutil-1.so.0.3.9

可以通过以下awk命令去重,挑出相同libpath的第一行来:

awk '{if(!a[$7]){a[$7]=$0; print $7, $1}}' source_text

这里使用了awk的关联数组,即建立以 $7key 的数组。对于第一行,a[$7] 为空,然后 a[$7]$0 赋值。因此处理第二行时,由于第二行的libpath是一样的,a[$7] 不为空,不会被print出来, 达到去重的目的。