本文介紹了一種shell指令碼,用來處理十進位數轉換成十六進位的方法。現有兩個資料檔案i0.txt和q0.txt,資料如下:
i0.txt q0.txt
935 3297
385 6964
-280 12697
1768 8404
7377 -852
#!bin/bash
#因為有負數,所以先轉換成16位十六進位數 %16x
cat i.txt | \
awk '{printf "%16x \n",$1}' > i00.txt
cat q.txt | \
awk '{printf "%16x \n",$1}' > q00.txt
#我需要的是i0.txt和q0.txt十進位數對應的4位十六進位數,取有效4位
cut -c 13-16 i00.txt > i_mem.txt
cut -c 13-16 q00.txt > q_mem.txt
#不足4位的,前面補0
cat i_mem.txt | \
awk '{printf "%04s \n",$1}' > i_mem_00.txt
cat q_mem.txt | \
awk '{printf "%04s \n",$1}' > q_mem_00.txt
#將兩個檔案(各4位)組成8位十六進位數
paste -d ":" i_mem_00.txt q_mem_00.txt > rfiu_mem_00.txt
sed 's/ ://g' rfiu_mem_00.txt > rfiu_mem.txt
#中間資料如下:
i00.txt q00.txt
3a7 ce1
181 1b34
ffffffffffffa1f 3199
6e8 20d4
1cdc fffffffffffffcac
i_mem.txt q_mem.txt
3a7 ce1
181 1b34
fa1f 3199
6e8 20d4
1cdc fcac
i_mem_00.txt q_mem_00.txt
03a7 0ce1
0181 1b34
fa1f 3199
06e8 20d4
1cdc fcac
rfiu_mem.txt
03a70ce1
01811b34
fa1f 3199
06e820d4
1cdcfcac
註:可能這個方法不是最精簡的,如有更好的方法請高手指點一二,不勝感激。