Próbuję skrypty bazy danych ze strumienia sieciowego. Strumień sieci po silnym seddzie upuszcza plik z trzema kolumnami, który wygląda mniej więcej tak zwany file.db
123.123.123.123, nazwa komputera, 110000103e21cc4
123.123.123.124, komputer2,11000010416200f
123.123.123.1, komputer3,110000106eb3f43
próbowałem użyć tego polecenia gawk bezskutecznie
gawk 'BEGIN {FS=OFS=","} {print $1,$2,strtonum("0x"$3)}' file.db
wynik z powyższego wygląda następująco
123.123.123.123, nazwa komputera, 76561198025415874
123.123.123.124, komputer2,76561198028824592
123.123.123.1, komputer3,76561198076346171
jednak dane wyjściowe powinny zostać przekonwertowane na to
123.123.123.123, nazwa komputera, 76561198025415876
123.123.123.124, komputer2,76561198028824591
123.123.123.1, komputer3,76561198076346179
dane wyjściowe są zawsze wyłączone w niewielkiej ilości, więc zakładam, że część biblioteki w systemie jest niepoprawna ... btw to jest osadzony system, na którym działa i wiem, że może konwertować, ponieważ zrobiłem to z bc, printf, itd itd
Jak mogę to zrobić?
źródło
awk
można wywoływać programy zewnętrzne, hacky sposób rozwiązania tego problemu prowadzi mnie do przekonania, że napisanie skryptu powłoki (użyciecut
ibc
) lepiej nadaje się do tego zadania niżawk
samemu. W każdym razie zmodyfikuję rozwiązanie, aby pasowało do twoich wymagań, od ciebie zależy, jak to zrobić.Patrzę wstecz na to i sposób, w jaki skończyłem to robić
tworzenie skryptu bash, takiego jak tzw. convert12345678.sh
a potem w gawk za wszystko, co potrzebowałem powiedzieć, jak w op (mocno zmodyfikowałem ten program od tego czasu), było coś takiego: i sipowałem ten program, ale zademonstruję z pliku
Zrobiłem to w ten sposób, usuwając nową linię w skrypcie bash, ponieważ szczerze przesunąłem ją później, umieszczając wykonanie skryptu, czyli w ten sposób nie chciałbym, aby nowa linia była wstawiana do wyniku natychmiast po konwersji, chyba że chciałem printf
źródło