Suchfunktion einrichten

Ich will zwei Logfiles miteinander vergleichen und anschließend die gleichen Hex Codes und normal leserliche Zahlen herausgeben (was er bei mir einfach mit einer rot dargestellten zahl macht, die in beiden Logs vorkommt). Damit bin ich auch soweit zufrieden.
Nun wollte ich noch, dass wenn er in dem einen Log eine normal leserliche Zahl findet, sie automatisch Hex codiert und anschließend nach der Hex Codierten in der anderen Logfile sucht, bzw nach beiden sucht. Denn es kann sein, dass die gleiche Nummer einmal normal leserlich vorkommt und in dem anderen Logfile Hex Codiert. Deswegen wäre es sinnvoll (da er mir vorher zig Hex Zahlen angezeigt hat), die benötigte Nummer einfach schnell zu konvertieren und in dem anderen Logfile danach zu suchen. Das ganze soll natürlich automatisch passieren. Bislang krieg ich es nur hin, wenn ich ihm die Zahl vorgebe (in diesem Fall die 4556), dass er sie Hex Codiert.

echo 'obase=16;4556' |bc

Das mit der shebang ist mir soweit klar gewesen ;)
 
Ich habe gestern ne Seite gefunden, wo es nen Tutorial dazu gab wie man konvertiert, aber irwie nicht von normalesn Zahlen auf Hex Zahlen.
Normale Zahlen haben doch die Basis 10, und Hex Zahlen die Basis 16?
Mein Code sieht folgendermaßen aus
Code:
for x in `cat test.log` ; do
  egrep --color HEX1=$(echo "obase=16; ibase=2(eig muss hier 10 stehen?); $BIN" |bc)
echo "bin $BIN = hex $HEX1" -n -H $x $1
done;
Das Problem ist dass er hier von Binary Zahlen nach Hex konvertiert. Und wenn ich statt der 2 ne 10 hinschreib, stimmt das BIN im Code ja immernoch nicht, aber was soll ich da reinschreiben?
 
Ja genau diesen Code habe ich doch ein Post über meinem neusten geschrieben, aber da muss ich eben die Nummer Manuel einfügen, und die konvertiert er dann. Ich will aber, dass er mein Logfile durchsucht nach Nummern, anschließend er sie konvertiert nach Hex, und dann im anderen Logfile nach beiden Varianten (normal leserlich UND Hex Codiert) sucht. Und wenn er die Nummer entweder normal leserlich in BEIDEN Logfiles gefunden hat, oder in dem einen normal leserlich und in dem anderen Hex Codiert gefunden hat, soll er sie mir rot darstellen bei der Ausgabe.
EDIT: Habe folgenden Code gefunden
Code:
for x in `cat test.log` ; do
  egrep --color HEX1=$(echo "obase=16; $DEC" |bc)
echo "dec $DEC = hex $HEX1" -n -H $x $1
done;
Müsste das nicht eigentlich der Code sein, aber leider gibt er mir gar nichts aus dann -.-
Schöne Beitragszahl übrigens (Beiträge: 1.337 ) :D
Edit: habe gerade in mein schlaues Buch geguckt, und da stand ich muss es beenden mit strg + d. Wenn ich das mache, gibt er mir folgendes aus
Code:
dec  = hex 112233445566778899 testlog1.log
Die Nummer die er mir gibt habe ich so ins Testlog geschrieben, aber konvertieren will er sie nicht.
 
Zuletzt bearbeitet:
Ich hab mal fix ein Script für Dich zusammengeschrieben:

Code:
#! /bin/bash
# written 2008 by Navy (damn lonesome at the moment)
# Licence: GPL

#########################################################################
#									#
# error handling							#
#									#
#########################################################################
function error()
{
	case $1 in
	1)
		echo -e "Usage: \nParameter -d for decimal(file), -h for hex(file)"
		;;
	2)	
		echo "Multiple parameter $2"
		;;
	3)
		echo "No values found"
		;;
	4)	
		echo "Unknown parameter $2"
		;;
	5)	
		echo "No file"
		;;
	6)	
		echo "Empty parameter"
		;;
	esac
}

#########################################################################
#									#
# parse integer values out of a text file and convert it to hex		#
# output: /tmp/hexedfile						#
#									#
#########################################################################
function parse_decfile()
{
	sed 's/\([0-9]\{1,\}\)/\n!#\1!#\n/g' $1 |grep '^!#.*!#'|sed 's/!#\(.*\)!#/\1/' > /tmp/decfile
	rm /tmp/hexedfile -f
	while read line;
	do
		echo "obase=16;" $line |bc >> /tmp/hexedfile; 
	done < /tmp/decfile
}

#########################################################################
#									#
# Parse hex-data out of a textfile					#
# output: /tmp/hexfile							#
#									#
#########################################################################
function parse_hexfile()
{
	sed 's/\(\(\([a-fA-F0-9]\{2\}\)\(\s\|$\)\)\{8\}\)/\n!#\1!#\n/g' $hexfile|grep '^!#\(\([0-9a-fA-F]\{2\}\)\s*\)\{8\}!'|sed 's/!#\(0*\s*\)*\|!#\|\s//g'|tr [:lower:] [:upper:] > /tmp/hexfile
}

#########################################################################
#									#
# Main									#
#									#
#########################################################################

# Parameter handling
if [ "$#" -ge 0 ];
then
	while [ "$1" != "" ];
	do
		case $1 in
			-h | --hex)
				if [ "$hexfile" != "" ];
				then	
					error "2" "$1"
				else
					shift
					hexfile=$1
				fi
				;;
			-d | --dec)
				if [ "$decfile" != "" ];
				then
					error "2" "$1"
				else	
					shift
					decfile=$1
				fi
				;;
			*)
				error "4" "$1"
				;;
		esac
		shift
	done
else
	error "1"
fi

# Work begins...
if [ "$hexfile" = "" -o "$decfile" = "" ];
then
	error 6;
else
	if [ -f "$decfile" -a -f "$hexfile" ];
	then
		parse_decfile "$decfile"
		parse_hexfile "$hexfile"
		sort /tmp/hexedfile /tmp/hexfile|uniq -d > /tmp/result
		if [ -s /tmp/result ];
		then
			echo -e "\nFollowing values found (in order hex, dec)"
		        while read line;
		        do
        		        echo -e "$line, " $(echo "ibase=16;" $line |bc)
			done < /tmp/result
		else
			error "3"
		fi

 		rm /tmp/{hexfile,hexedfile,decfile, result} -f
		
	else
		error "5"
	fi
fi

Ich habe es getestet und es arbeitet. GGf solltest Du die RegExp anpassen auf die Wertgrößen (Zeichenlängen) die Du benötigst.

HTH
 

Anhänge

  • dddd.zip
    1 KB · Aufrufe: 11
Einfach die Dateien als Parameter angeben:
Code:
./dddd -d $DEZIMALLOG -h $HEXLOG

anstatt "-d" ist "--dec", und für "-h" ist "--hex" möglich.
 

Neue Beiträge

Zurück