Jawaban John T adalah cara untuk konversi hex, tetapi Anda juga dapat melakukannya dengan cara ini (yang juga dapat digunakan untuk basis lain):
$ hexval=0x59999
$ hexval=${hexval#*x}
$ echo $((16#$hexval))
367001
Demonstrasi:
$ echo $((2#1011010))
90
$ echo $((8#1776))
1022
$ echo $((23#mmmmm))
6436342
Edit:
#!/bin/bash
base=16
while read -r val
do
val=${val#*x}
echo $(($base#$val))
done < inputfile > outputfile
Satu-satunya keuntungan atas jawaban John T adalah jawaban ini dapat dengan mudah diadaptasi untuk mengubah basis lain menjadi desimal. Dia sedikit lebih cepat.
gawk
ini perintah tampaknya sedikit lebih cepat daripada versi shell John:
gawk --non-decimal-data '{printf "%d\n",$1}' inputfile > outputfile
Ini tentang kecepatan yang sama dengan perintah Perl Anda. Mengapa tidak menggunakannya saja?
Omong-omong, bagian terakhir dari one-liner Perl Anda dapat diganti dengan -l
opsi:
perl -lpe '$_=hex'
Catatan lain:Biasanya alur yang Anda tampilkan dalam pertanyaan Anda akan ditulis sebagai:
util < file1 > file2
atau, jika cat
mewakili placeholder, maka nama dummy harus digunakan:
prog1 < file1 | util | prog2 > file2
maka Anda tidak akan membuat orang mengeluh tentang penggunaan cat
yang tidak berguna .
Saya biasanya hanya menggunakan printf...
while read x;do printf '%d\n' $x;done <file