shell - 如何逐行比较两个文件,但仅比较选定的值

标签 shell awk while-loop

我想逐行比较两个文件,并检查第一个文件中的左/上坐标是否与第二个文件中的相同。

我在 UNIX Shell 中遇到有关此命令的问题:

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

总而言之,我想比较两个 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

我不知道该怎么办... 请帮助我!

最佳答案

假设您有两个具有 left/top 坐标的文件,每行一对,left 值始终位于 top 之前code> 值,中间可能有“噪音”行,那么最简单的解决方案是首先过滤掉这些值(例如使用 sed),然后逐行比较(例如使用 >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")

使用 first.htmlsecond.html 输入,输出如下所示:

$ 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

关于shell - 如何逐行比较两个文件,但仅比较选定的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46974839/

相关文章:

linux - 递归复制带有剥离前缀的文件

awk - 拆分列后如何找到LAST子字段

php - 背靠背准备好的语句中的第二个准备好的语句存在问题

c - 如何避免C中的sscanf()引起无限的while循环,而不是存储用户输入?

java - 可执行的 shell 脚本在嵌入然后从 java 存档中提取后仍然可以执行吗?

linux - Uniq 和计数

awk - 如何使用awk将行转换为列?

windows - awk 的 gsub 问题 (gawk)

c - 嵌套在循环中的公式将无法正确执行

linux - Oracle数据库警报日志脚本错误