[+] Bash - dodawanie liczb w zapisie heksadecymalnym

Potrzebujesz pomocy z C, C++, perl, python, itp.
Gloochy
Posty: 4
Rejestracja: 08 sierpnia 2011, 11:21

[+] Bash - dodawanie liczb w zapisie heksadecymalnym

Post autor: Gloochy »

Witam

N
a początku się usprawiedliwię, szukałem na forum (i nie tylko) ale nie znalazłem odpowiedzi na poniższy problem, więc jeżeli ktoś o coś podobnego wcześniej pytał to przepraszam.

Mam plik z MAC adresami kart sieciowych:

Kod: Zaznacz cały

001dcf1e47f4
001dcffab822
001dcdc3decd
001dcd876a6e
itd.
Teraz potrzebuję skryptu, który:
  1. odczyta poszczególne MAC adresy z pliku,
  2. doda do nich 1,
  3. zapisze wynik do innego pliku lub do tego samego pliku ale na zasadzie linia pod linią, czyli:

Kod: Zaznacz cały

001dcf1e47f4 <-stary MAC
001dcf1e47f5 <- dopisany MAC
 001dcffab822 <-stary MAC
001dcffab823 <- dopisany MAC
itd.
Rozumiem to tak, że muszę wczytać poszczególne MAC adresy, zamienić je na postać dziesiętną i wykonać działanie:
(dodać 1) -> zamienić wynik na postać heksadecymalną i zapisać wynik.

(chyba że można dodawać w postaci heksadecymalnej, niestety szukałem i też nie znalazłem nic w tym temacie).

Niestety, w kwestii skryptów BASH-a jestem zielony i nie mam pojęcia jak się za to zabrać.

Z góry dziękuję za pomoc.

Pozdrawiam.
G.

Dodane:
Odnośnie samego dodawania poradziłem sobie, może nie najlepiej ale działa.

Kod: Zaznacz cały

IN=001dcf1e47f4 (przykładowa wartość HEX)
a=0x$IN
b=$[$a+1]
OUT=`printf "%X\n" $b`
echo "OUT: $OUT"
Teraz pozostaje kwestia wpisania tego do pliku, linia w linię (jak opisałem powyżej).

Pozdrawiam.
G.
bernat
Posty: 4
Rejestracja: 16 grudnia 2011, 19:07

Post autor: bernat »

Kod: Zaznacz cały

#!/bin/bash
 while read line
 do
 value=$(( 0x$line + 1))
 echo 16o${value}p |dc ;
 done
Czyta ze standardowego wejścia i wysyłając na standardowe wyjście. Wprawdzie bez wiodących zer, ale z tym już musisz sobie sam poradzić.

PS. Sprawdź jeszcze dokładnie, czy gdzieś się nie pomyliłem[/n].
Gloochy
Posty: 4
Rejestracja: 08 sierpnia 2011, 11:21

Post autor: Gloochy »

Dziękuję za pomoc.
bernat
Posty: 4
Rejestracja: 16 grudnia 2011, 19:07

Post autor: bernat »

Kod: Zaznacz cały

#!/bin/bash
 while read line
 do
 value=$(( 0x$line));
 echo 16o${value}p |dc ;
 echo 16o$((${value}+1))p |dc ;
 done
 
I juz. Wypisuje linia pod linia, tak jak chciales.
ODPOWIEDZ