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