格式化diff输出以显示" current - 值previous - values"

时间:2016-07-14 18:52:05

标签: bash shell sed diff

我有 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命令我可以添加/使用以使输出更加“用户友好”?

1 个答案:

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