AWK конвертировать десятичные в двоичные - PullRequest
0 голосов
/ 19 марта 2019

Я хочу использовать AWK для преобразования списка десятичных чисел в файле в двоичный файл, но встроенного метода, похоже, нет. Пример файла, как показано ниже:

134218506
134218250
134217984
1610612736
16384
33554432

Ответы [ 4 ]

1 голос
/ 19 марта 2019

Вы можете попробовать с DC:

# -f infile : Use infile for data
# after -e , it is there are the dc command
dc -f infile -e '
  z          # number of values
  sa         # keep in register a
  2
  o          # set the output radix to 2 : binary
  [
    Sb       # keep all the value of infile in the register b  
             # ( b is use here as a stack)
    z
    0 <M     # until there is no more value
  ] sM       # define macro M in [ and ]
  lMx        # execute macro M to populate stack b
  [ 
    Lb       # get all values one at a time from stack b
    p        # print this value in binary
    la       # get the number of value
    1
    -        # decremente it
    d        # duplicate
    sa       # keep one in register a
    0<N      # the other is use here
  ]sN        # define macro N
  lNx'       # execute macro N to print each values in binary
1 голос
/ 19 марта 2019

Вы можете попробовать Perl однострочно

$ cat hamdani.txt
134218506
134218250
134217984
134217984
1610612736
16384
33554432


$  perl -nle ' printf("%b\n",$_) ' hamdani.txt
1000000000000000001100001010
1000000000000000001000001010
1000000000000000000100000000
1000000000000000000100000000
1100000000000000000000000000000
100000000000000
10000000000000000000000000

$
1 голос
/ 19 марта 2019

Вот способ awk, функционирующий для вашего удовольствия:

awk '
function d2b(d,  b) {
      while(d) {
          b=d%2b
          d=int(d/2)
      }
      return(b)
}
{
    print d2b($0)
}' file

Вывод первых трех записей:

1000000000000000001100001010
1000000000000000001000001010
1000000000000000000100000000
0 голосов
/ 19 марта 2019

Вы не должны использовать awk для этого, но bc:

$ bc <<EOF
  ibase=10
  obase=2
  $(cat file)
  EOF

или

bc <<< $(awk 'BEGIN{ print "ibase=10; obase=2"}1' file)
...