1、参考https://unix.stackexchange.com/questions/81916/how-to-find-a-space-in-a-text-using-grep找到objdum有效代码行
2、完整的脚本如下(下一步改造未python方式实现)
#!/bin/bash
# the objdump format of arm similar as
# 0000000000fa19d0 <forms_>:
# fa19d0: d0133c81 adrp x1, 27733000 <fmcom_+0x26259af0>
# fa19d4: a9ba7bfd stp x29, x30, [sp, #-96]!
if [ $# -ne 2 ]; then
echo `basename $0`: too few arguments
echo Usage: `basename $0` objdump1 objdump2
exit 1
fi
FILE1OUT="$(mktemp).out1"
FILE2OUT="$(mktemp).out2"
FILE1SUM=0
FILE2SUM=0
echo "#1 = $1"
echo "#2 = $2"
grep "^[[:space:]]\+[0-9a-zA-Z]\+:" $1 | awk '{print $3}' | sort -f | uniq -c > $FILE1OUT
grep "^[[:space:]]\+[0-9a-zA-Z]\+:" $2 | awk '{print $3}' | sort -f | uniq -c > $FILE2OUT
printf "||= %32s =||= %6d =||= %6d =||= Diff =||\n" "Insn" 1 2
(cat $FILE1OUT $FILE2OUT | awk '{print $2}' | sort -f | uniq -i) > sort.tmpfile
while read i; do
printf "|| %34s || " $i
FILE1CNT="$(grep -i " $i$" $FILE1OUT | awk '{print $1}')"
if [ -z "$FILE1CNT" ]; then
FILE1CNT="0"
fi
FILE1SUM="$(($FILE1SUM+$FILE1CNT))"
FILE2CNT="$(grep -i " $i$" $FILE2OUT | awk '{print $1}')"
if [ -z "$FILE2CNT" ]; then
FILE2CNT="0"
fi
FILE2SUM="$(($FILE2SUM+$FILE2CNT))"
printf "%8d || %8d ||" $FILE1CNT $FILE2CNT
if [ $(($FILE1CNT-$FILE2CNT)) -gt 0 ]; then
printf " \e[1;32m%8d\e[0m ||\n" $(($FILE1CNT-$FILE2CNT))
elif [ $(($FILE1CNT-$FILE2CNT)) -lt 0 ]; then
printf " \e[1;31m%8d\e[0m ||\n" $(($FILE1CNT-$FILE2CNT))
else
echo " ||"
fi
done < sort.tmpfile
printf "|| **Total** || %8d || %8d ||" $FILE1SUM $FILE2SUM
if [ $(($FILE1SUM-$FILE2SUM)) -gt 0 ]; then
printf " \e[1;32m%8d\e[0m ||\n" $(($FILE1SUM-$FILE2SUM))
elif [ $(($FILE1SUM-$FILE2SUM)) -lt 0 ]; then
printf " \e[1;31m%8d\e[0m ||\n" $(($FILE1SUM-$FILE2SUM))
else
echo " ||"
fi
rm sort.tmpfile
exit 0