Я пытаюсь сценарий базы данных из сетевого потока. Поток сети после того, как он был в большой степени sed, удаляет файл из трех столбцов, который выглядит примерно так: file.db
123.123.123.123, имя компьютера, 110000103e21cc4
123.123.123.124, computer2,11000010416200f
123.123.123.1, computer3,110000106eb3f43
я пытался использовать эту команду gawk безрезультатно
gawk 'BEGIN {FS=OFS=","} {print $1,$2,strtonum("0x"$3)}' file.db
вывод из вышеперечисленного выглядит следующим образом
123.123.123.123, имя компьютера, 76561198025415874
123.123.123.124, computer2,76561198028824592
123.123.123.1, computer3,76561198076346171
однако вывод должен преобразовываться в это
123.123.123.123, имя компьютера, 76561198025415876
123.123.123.124, computer2,76561198028824591
123.123.123.1, computer3,76561198076346179
вывод всегда отключен на небольшую величину, поэтому я предполагаю, что какая-то библиотека в системе неверна ... кстати, это встроенная система, на которой она работает, и я знаю, что она может конвертироваться, потому что я сделал это с помощью bc, printf, и т. д.
Как я могу сделать эту работу
awk
можно вызывать внешние программы, хакерский способ решения этой проблемы заставляет меня поверить, что написание сценария оболочки (с использованиемcut
иbc
) лучше подходит для этой задачи, чем вawk
одиночку. В любом случае, я изменю решение в соответствии с вашими требованиями, и вам решать, как это сделать.Я оглядываюсь назад на это, и то, как я это сделал,
создание bash-скрипта вроде так называемого convert12345678.sh
и затем в gawk для того, что мне нужно было сказать, как в операторе (я сильно изменил эту программу с тех пор) было что-то вроде этого, и я передал эту программу, но я продемонстрирую из файла
я сделал это таким образом, удалив новую строку в bash-скрипте, потому что, честно говоря, я переместил ее потом, размещение выполнения скрипта, то есть, таким образом, я бы не вставлял символ новой строки в вывод сразу после преобразования, если я не хотел, чтобы Printf
источник