Text-Processing

將二進製字元串轉換為十進制

  • September 29, 2018

我想用 bash 腳本處理一個如下所示的文本文件:

ADD    $05  $05  $05
SUBI   $06  $06  00011
MUL    $07  $07  $07
JSR    011101

取二進制數(總是長於 4 位)並將它們轉換為十進製表示。

對於前面的範例,這是我想要結束的文件:

ADD    $05  $05  $05
SUBI   $06  $06  3
MUL    $07  $07  $07
JSR    29

我一直在探索trand sed,但我認為他們不允許我在替換之前使用匹配的模式(轉換它)。我可以採取什麼方法?

編輯:在@DopeGothi 的建議下,鑑於我每行最多有一個二進制數,我可以創建一個包含所有二進制數十進製版本的臨時文件。問題是現在我需要插入它們:

每次我在第一個文件中找到一個二進制數時,我都會將文件中的相應數字替換為小數。

使用 Perl 的packand可能有一種更優雅的方式unpack,但是使用字元串操作和的組合oct

$ perl -pe 's/\b[01]+\b/oct "0b" . $&/ge' file
ADD    $05  $05  $05
SUBI   $06  $06  3
MUL    $07  $07  $07
JSR    29

請參閱轉換二進制、八進制和十六進制數

試試這個小bash腳本:

while read -a INP; do for i in ${INP[@]}; do [[ "$i" =~ [^10] ]] || i=$((2#$i));  printf "%s\t" "$i" ; done; printf "\n"; done < file3
ADD     $05     $05     $05 
SUBI    $06     $06     3   
MUL     $07     $07     $07 
JSR     29  

可能會受益於一些拋光。它將文件的行讀入數組,測試其元素是否僅包含二進制數字(0 和 1),2#如果是,則在列印之前使用帶有基數 2 前綴的“算術評估”

引用自:https://unix.stackexchange.com/questions/472185