2017-10-27 12 views
2

2つのファイルを1行ずつ比較して、最初のファイルの左/上の座標が2番目のファイルと同じであるかどうかを確認します。2つのファイルを1行ずつ比較する方法選択した値のみを使用する

私はUNIXシェルでこのコマンドに関する問題をしました:

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

私は2つのHTML文書でPXを比較したいと思いまとめると:

入力:

最初の:

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

秒:

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

プロセス:

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 

出力:代わりにそれの

------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 

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

私はどのように行うかわからない... 助けてください!

+0

あなたが本当に望むものはまだ明確ではありません。あなたがここで言及したプロセスについては忘れてください。 2つのファイルを比較しながら何をしたいのかを単語で説明できますか? – batMan

+0

ピクセルのdiv位置(左と上)を比較したいと思います。私は最初と最後の位置を持つhtml文書を持っています。私は各pxの番号を取得し、最初のhtml文書が2番目のhtml文書と同じであるかどうかを確認したいと思います。 –

+0

したがって、2つのファイルを1行ずつ比較したいのですが、実際の左/上の座標を含む行だけをペアにしますか? – randomir

答えて

2

その後、最も簡単な解決策は、最初(の値をフィルタリングすることです、あなたが間に可能な「ノイズ」行でtop値の前left/top座標、1行に1つのペア、常にleft値を持つ2つのファイルを、持っていると仮定すると、 sedの例)、次に()awkと、例えばライン毎の比較:

$ 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:

#!/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") 

first.htmlsecond.html入力すると、出力は以下のように見えます

+0

私は2つの異なるカウンタ "left"と "top"を持っているので、ループの各端で+2を取るので、それを行うことはできません。この$($ left)や$($ top)のように増分したいと思います。分かるでしょう? –

+0

私は言うことができません。質問にサンプル入力を投稿できますか? – randomir

+0

サンプルで質問を更新しました。 –

0

うん!私は私の問題を解決しました。

私はこのようなwrited

:私は実行して、私のVARをインクリメントすることができた後

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

left=$(($left + 2)) 

そして、これが

'{print $2}' 
'{print $4}' 
'{print $6}' 
'{print $8}' 
'{print $10}' 
... 
を書く代わりに、それの

'{print $left}' 

これは私が欲しかったものです

おかげさまでお手伝いしてくれてありがとうございました。

乾杯!!!!!

関連する問題