Утилита Base64 в awk - PullRequest
       0

Утилита Base64 в awk

0 голосов
/ 08 января 2020

Я сталкиваюсь с конкретной проблемой c, когда пытаюсь преобразовать двоичный файл изображения (с подписью jpeg 0xFFD8) в строку base64 с помощью awk. Мне кажется, что я почти на месте, но строка base64 урезана и не завершена. Поскольку двоичный файл изображения большой, я не уверен, что это вызывает проблему. Команда, создающая это, приведена ниже:

#!/bin/bash
awk --field-separator '|' '{ "echo "$mybinaryhere" | xxd -r -p | base64" | getline x print x }' myfile.csv

Вывод:

/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMU

Ожидаемый вывод должен быть похожим, но гораздо более длинным, поскольку это двоичное изображение. $mybinaryhere - это просто переменная столбца, которая содержит полное двоичное изображение, когда awk читает myfile.csv

Спасибо

Ответы [ 2 ]

1 голос
/ 08 января 2020

Вывод base64 переносится с соответствующим размером столбца (76 столбцов), и каждая строка заканчивается новой строкой. Функция getline для awk просто читает следующую единственную строку из стандартного ввода, и оставшиеся строки будут отброшены.
Тогда попробуйте:

awk --field-separator '|' '{ while ("echo "$mybinaryhere" | xxd -r -p | base64" | getline) print }' myfile.csv
0 голосов
/ 08 января 2020

gawk (и другие версии awk) имеют ограничение на длину командной строки, которая может быть передана в getline.

Например, в окне Ubuntu я получаю:

bash$ for a in gawk 'busybox awk'; do
  for x in 131059 131060; do
      echo "$a :"
      perl -e 'print "." x '$x',"\n"' |\
      $a '{
        y=$1
        print length($1)+length("echo |md5sum")
        "echo "y"|md5sum" | getline z
        print z
      }'
  done
done
gawk :
131071
3ee42da12241d3e96a1513588bf50daf  -
gawk :
131072

busybox awk :
131071
3ee42da12241d3e96a1513588bf50daf  -
busybox awk :
131072

$

На FreeBSD я получаю:

  • awk: 261764
  • nawk: 261763
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...