2017-10-27 1 views
2

Ich möchte zwei Dateien Zeile für Zeile vergleichen und überprüfen, ob die linken/oberen Koordinaten in der ersten Datei in der zweiten identisch sind.Wie zwei Dateien Zeile für Zeile, aber nur für ausgewählte Werte zu vergleichen

Ich habe ein Problem in Bezug auf diesen Befehl in UNIX Shell:

awk -F"px" '{print $1}' 

Fazit Ich möchte die Pixel in zwei HTML-Dokumente vergleichen:

Eingang:

Die erste:

<div class="txt" style="position:absolute; left:76px; top:26px;"> 

Die zweite:

<div class="txt" style="position:absolute; left:61px; top:28px;"> 

Prozess:

i=1 
left=1 
top=2 
while [ "$linesBodyPdf1" > "$i" ] 
do 
echo "------Line $i--------" 
px1=`echo "left V1=" && echo $bodyPdf1 | awk -F"px" '{print $left}' | awk -F"left:" '{print $2}'` 
echo $px1 
px2=`echo "top V1=" && echo $bodyPdf1 | awk -F"px" '{print $top}' | cut -c7-9` 
echo $px2 

px1=`echo "left V2=" && echo $bodyPdf2 | awk -F"px" '{print $left}' | awk -F"left:" '{print $2}'` 
echo $px1 
px2=`echo "top V2=" && echo $bodyPdf2 | awk -F"px" '{print $top}' | cut -c7-9` 
echo $px2 

left=$(($left + 2)) 
top=$(($top + 2)) 
i=$(($i + 1)) 
done 

Output:

------Line 1-------- 
left V1= 0px; top:0px;" width="595" height="841" src="page1.png"> <div class="txt" style="position:absolute; 
top V1= <i 
left V2= 0px; top:0px;" width="595" height="841" src="page1.png"> <div class="txt" style="position:absolute; 
top V2= <i 

Anstelle davon:

------Line 1-------- 
left V1= 76 
top V1= 26 
left V2= 61 
top V2= 28 

Ich weiß nicht, wie es geht ... Bitte helfen Sie mir!

+0

Noch nicht klar, was Sie wirklich wollen.Vergessen Sie den Prozess, den Sie hier erwähnt haben. Kannst du in Worten erklären, was du willst, wenn du zwei Dateien vergleichst? – batMan

+0

Ich möchte Pixel Div Positionen (links und oben) vergleichen. Ich habe ein erstes HTML-Dokument mit einer linken und oberen Position und eine zweite mit einer linken und oberen Position. Ich möchte die Anzahl von jedem px erhalten und einen Unterschied machen, um zu sehen, ob das erste HTML-Dokument das gleiche wie das zweite ist. –

+0

Sie möchten also zwei Dateien Zeile für Zeile vergleichen, aber nur Zeilen paaren, die tatsächliche Links/Oben-Koordinaten enthalten? – randomir

Antwort

2

Sie haben zwei Dateien mit left/top Koordinaten Unter der Annahme, ein Paar pro Zeile, die Werte aus dem ersten Filter immer left Wert vor top Wert, mit möglichen „Rauschen“ Linien dazwischen, dann wäre die einfachste Lösung (für Beispiel mit sed) und dann zu vergleichen, Zeile für Zeile (zum Beispiel mit awk):

#!/bin/bash 
# Usage: compare.sh FILE1 FILE2 

filter() { 
    sed -nE 's/.*left\s*:\s*([0-9]+)\s*px.*top\s*:\s*([0-9]+)\s*px.*/\1 \2/gp' 
} 

awk 'NR==FNR { x[NR]=$0 } 
    NR>FNR { print "Line " FNR ": " x[FNR] (x[FNR]==$0 ? " == ":" != ") $0 }' 
    <(filter <"$1") <(filter <"$2") 

mit dem first.html und second.html Eingang sieht die Ausgabe wie:

$ cat first.html 
<div class="txt" style="position:absolute; left:76px; top:26px;"> 
<span> 
<div class="txt" style="position:absolute; left:74px; top:25px;"> 

$ cat second.html 
<div class="txt" style="position:absolute; left:61px; top:28px;"> 
<div class="txt" style="position:absolute; left:74 px; top: 25px;"> 
<div class="txt" style="position:absolute; left:61px; top:28px;"> 

$ ./compare.sh first.html second.html 
Line 1: 76 26 != 61 28 
Line 2: 74 25 == 74 25 
Line 3: != 61 28 
+0

Ich kann das nicht tun, weil ich zwei verschiedene Zähler "links" und "oben" habe, die +2 an jedem Ende der Schleife brauchen. Ich möchte so wie $ ($ links) oder $ ($ oben) erhöhen. Du verstehst? –

+0

Ich kann nicht sagen, dass ich es tue. Können Sie bitte eine Beispieleingabe in Ihre Frage posten? – randomir

+0

Ich habe meine Frage mit einem Beispiel aktualisiert. –

0

Yeah! Ich habe mein Problem gelöst.

writed ich wie folgt aus:

'{print $left}' 

Statt es:

'{print $'"${left}"'}' 

Nachdem ich meine var indem erhöhen kann:

left=$(($left + 2)) 

Und das schreiben

'{print $2}' 
'{print $4}' 
'{print $6}' 
'{print $8}' 
'{print $10}' 
... 

Das war, was ich wollte

Vielen Dank an alle für Ihre Hilfe gleich.

Prost !!!!!

Verwandte Themen