Text-Processing
將二進製字元串轉換為十進制
我想用 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
我一直在探索
tr
andsed
,但我認為他們不允許我在替換之前使用匹配的模式(轉換它)。我可以採取什麼方法?編輯:在@DopeGothi 的建議下,鑑於我每行最多有一個二進制數,我可以創建一個包含所有二進制數十進製版本的臨時文件。問題是現在我需要插入它們:
每次我在第一個文件中找到一個二進制數時,我都會將文件中的相應數字替換為小數。
使用 Perl 的
pack
and可能有一種更優雅的方式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 前綴的“算術評估”