我有 for 循环,用于确定两个文件之间是否存在任何差异。如果存在差异,我需要将这些差异附加到文本文件中,然后我将通过电子邮件发送给某些同事。
我目前正在尝试使用 diff -y ,因此命令的输出和生成的电子邮件将具有易于阅读的收件人格式。
我用来获得原始差异的命令是:
diff -y unita3x0101.pre unita3x0101.pre.v1 | grep "|" >> filetoemail.txt
这给了我以下输出:
command=(PV SY 102) - PV SY 102 7:54:38 | command=(PV SY 102) - PV SY 102 7:27:47
command=(PV SY 906) - PV SY 906 2600.000 Inj#1 K-Fact | command=(PV SY 906) - PV SY 906 5200.000 Inj#1 K-Fact
command=(PV SY 907) - PV SY 907 0.8424 Inj#1 Mtr-Fact | command=(PV SY 907) - PV SY 907 0.9600 Inj#1 Mtr-Fact
command=(PV SY 912) - PV SY 912 0.1560 Inj#2 Mtr-Fact | command=(PV SY 912) - PV SY 912 1.3109 Inj#2 Mtr-Fact
我正在寻找的是:
Current - PV SY 102 7:54:38 Previous - PV SY 102 7:27:47
Current - PV SY 906 2600.000 Inj#1 K-Fact Previous - PV SY 906 5200.000 Inj#1 K-Fact
Current - PV SY 907 0.8424 Inj#1 Mtr-Fact Previous - PV SY 907 0.9600 Inj#1 Mtr-Fact
Current - PV SY 912 0.1560 Inj#2 Mtr-Fact Previous - PV SY 912 1.3109 Inj#2 Mtr-Fact
我最接近我想要的输出是使用这个:
diff -y unita3x0101.pre unita3x0101.pre.v1 | grep "|" | sed s/\command=\(PV/Current\ \ / | sed s/\command=\(PV/Previous\ \ /
但它并没有删除所有不需要的字符:
Current SY 102) - PV SY 102 7:54:38 | Previous SY 102) - PV SY 102 7:27:47
Current SY 906) - PV SY 906 2600.000 Inj#1 K-Fact | Previous SY 906) - PV SY 906 5200.000 Inj#1 K-Fact
Current SY 907) - PV SY 907 0.8424 Inj#1 Mtr-Fact | Previous SY 907) - PV SY 907 0.9600 Inj#1 Mtr-Fact
Current SY 912) - PV SY 912 0.1560 Inj#2 Mtr-Fact | Previous SY 912) - PV SY 912 1.3109 Inj#2 Mtr-Fact
是否有其他方法或更多sed命令我可以添加/使用以使输出更加“用户友好”?
答案 0 :(得分:1)
您可以将diff
发送到此awk
命令并避免grep
:
diff -y unita3x0101.pre unita3x0101.pre.v1 |
awk -F ' - |[[:blank:]]*\\|' '/[|]/{printf "%-40s\t\t%-40s\n",
"Current - " $2, "Previous - " $4}'
Current - PV SY 102 7:54:38 Previous - PV SY 102 7:27:47
Current - PV SY 906 2600.000 Inj#1 K-Fact Previous - PV SY 906 5200.000 Inj#1 K-Fact
Current - PV SY 907 0.8424 Inj#1 Mtr-Fact Previous - PV SY 907 0.9600 Inj#1 Mtr-Fact
Current - PV SY 912 0.1560 Inj#2 Mtr-Fact Previous - PV SY 912 1.3109 Inj#2 Mtr-Fact