Bash 如何编写脚本来验证长文本文件中的更改?

Bash 如何编写脚本来验证长文本文件中的更改?,bash,Bash,我正在编写一个脚本,以验证长.txt文件中的某些更改是否正确。这样做的目的是找到新的更改,并将这些值与旧值进行比较,我可以看到更改了哪些参数,因为文本文件的每行结构如下: TR_Partner=google TR_New_Partner=google# 每次更改时,第一行是原始值,下一行包含相同的名称,只是添加了单词“New”和新值(在本例中是google#)。我需要制作一个脚本,可以检查长文本文件中的所有行,以便检查所有新值是否与原始值匹配,我尝试了以下方法: #!/bin/bash

我正在编写一个脚本,以验证长
.txt
文件中的某些更改是否正确。这样做的目的是找到新的更改,并将这些值与旧值进行比较,我可以看到更改了哪些参数,因为文本文件的每行结构如下:

TR_Partner=google
TR_New_Partner=google# 
每次更改时,第一行是原始值,下一行包含相同的名称,只是添加了单词“New”和新值(在本例中是google#)。我需要制作一个脚本,可以检查长文本文件中的所有行,以便检查所有新值是否与原始值匹配,我尝试了以下方法:

#!/bin/bash


partner="$(grep -m1 Partner test.txt | cut -d"=" -f2)"
new_partner="$(grep -m1 New_Partner test.txt | cut -d"=" -f2)"

Data="$(grep -m1 Data test.txt | cut -d"=" -f2)"
New_Data="$(grep -m1 New_Data test.txt | cut -d"=" -f2)"

Direction="$(grep -m1 Direction test.txt | cut -d"=" -f2)"
New_Direction="$(grep -m1 New_Direction test.txt | cut -d"=" -f2)"


if [ $partner != $new_partner ]; then
    echo "warning invalid data"
    exit 1;
fi
if [ $Data != $New_Data ]; then
    echo "warning invalid data"
    exit 1;
fi
if [ $Direction != $New_Direction ]; then
    echo "warning invalid data"
    exit 1;
fi
我像这样测试代码:
bash script.sh test.txt
,期望的输出是这样的,因为google与google不匹配:

但这是一个非常糟糕的方法,因为它通常不起作用,我需要找到一种方法来自动化这项任务,我想感谢任何关于如何继续这项艰巨任务的建议或提示

file.txt
文件如下:

 ENTERPRISE
 AB_EDI_Number=number
 AB_Partner=google
 AB_New_Partner=google#    
 AB_Data_Type=null
 AB_New_Data_Type=null
 AB_Address=address 
 AB_New_Address=address

这将显示已更改值的字段名:

sed 's/_New_/_/' file.txt | uniq | sed 's/=.*//' | uniq -d
示例(为简洁起见,仅考虑输入行3-6):

第一sed

TR_Partner=google
TR_New_Partner=google#
TR_Data_Type=null
TR_New_Data_Type=null
->

第一个uniq:删除相邻的重复行(值不变的字段)

->

第二个sed:删除“=”和后面的所有内容

TR_Partner=google
TR_Partner=google#
TR_Data_Type=null
->

第二个uniq:显示重复行(具有更改值的字段)


这将显示已更改值的字段名:

sed 's/_New_/_/' file.txt | uniq | sed 's/=.*//' | uniq -d
示例(为简洁起见,仅考虑输入行3-6):

第一sed

TR_Partner=google
TR_New_Partner=google#
TR_Data_Type=null
TR_New_Data_Type=null
->

第一个uniq:删除相邻的重复行(值不变的字段)

->

第二个sed:删除“=”和后面的所有内容

TR_Partner=google
TR_Partner=google#
TR_Data_Type=null
->

第二个uniq:显示重复行(具有更改值的字段)

像这样的

last_key=“”
last_value=“”
#逐行阅读
而read-r行;做
#分成两对
IFS=“=”读取-r键值类似的内容

last_key=“”
last_value=“”
#逐行阅读
而read-r行;做
#分成两对

IFS=“=”读取-r键值使用
diff
这就是它的用途,尝试重新创建它没有多大意义…或将文件放入版本控制系统。使用
diff
这就是它的用途,尝试重新创建它没有多大意义…或将文件放入版本控制系统。谢谢,我真的很感谢你在这项艰巨任务中的帮助,这非常有用。谢谢,我真的很感谢你在这项艰巨任务中的帮助,这非常有用。
TR_Partner=google
TR_Partner=google#
TR_Data_Type=null
TR_Partner
TR_Partner
TR_Data_Type
TR_Partner