สิ่งนี้จะพิมพ์ออฟเซ็ตและไบต์เป็นเลขฐานสิบหก:
cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'
หรือทำ$1-1
เพื่อให้เริ่มต้นการพิมพ์ออฟเซตแรกที่ 0
cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}'
น่าเสียดายที่strtonum()
เฉพาะสำหรับ GAWK ดังนั้นสำหรับ awk รุ่นอื่นเช่น mawk คุณจะต้องใช้ฟังก์ชันการแปลงฐานแปดถึงทศนิยม ตัวอย่างเช่น,
cmp -l file1.bin file2.bin | mawk 'function oct2dec(oct, dec) {for (i = 1; i <= length(oct); i++) {dec *= 8; dec += substr(oct, i, 1)}; return dec} {printf "%08X %02X %02X\n", $1, oct2dec($2), oct2dec($3)}'
แยกย่อยเพื่อความสะดวกในการอ่าน:
cmp -l file1.bin file2.bin |
mawk 'function oct2dec(oct, dec) {
for (i = 1; i <= length(oct); i++) {
dec *= 8;
dec += substr(oct, i, 1)
};
return dec
}
{
printf "%08X %02X %02X\n", $1, oct2dec($2), oct2dec($3)
}'
od
...