源文本格式如下:
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的关联数组,即建立以 $7
为 key
的数组。对于第一行,a[$7]
为空,然后 a[$7]
被 $0
赋值。因此处理第二行时,由于第二行的libpath
是一样的,a[$7]
不为空,不会被print出来, 达到去重的目的。