GNU/Linux >> Belajar Linux >  >> Linux

Utilitas shell Linux:mengonversi daftar heksadesimal menjadi daftar desimal

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


Linux
  1. 3 Cara Mendaftar Pengguna di Linux

  2. Cara Mengganti Shell di Linux

  3. Perintah Linux ls - Daftar File

  1. Perintah gema Linux

  2. 12 Contoh Bash For Loop untuk Scripting Shell Linux Anda

  3. echo Contoh Perintah di Linux

  1. Bagaimana cara mengubah karakter hex ke ASCII di shell Linux?

  2. Bagaimana cara mengubah output shell Linux ke HTML?

  3. Mengirim email dari skrip shell linux