首页 > 解决方案 > 比较文件 pooutput.txt 文件和 apdca-sd-rt01.txt 文件找到在 apdca-sd-rt01.txt 中找到的确切行,然后打印 ok else not ok

问题描述

2个文件进行比较。pooutput.txt & apdca-sd-rt01.txt 是文件。

pooutput.txt 包含:

323   Po323(SU)   Eth      LACP      Eth1/14(P)   Eth2/14(P)
345   Po345(SU)   Eth      LACP      Eth1/15(P)   Eth2/15(P)
367   Po367(SU)   Eth      LACP      Eth1/16(P)   Eth2/16(P)

apdca-sd-rt01.txt 包含:

323   Po323(SU)   Eth      LACP      Eth1/14(P)   Eth2/14(P)
345   Po345(SU)   Eth      LACP      Eth1/15(P)   Eth2/15(P)
367   Po367(SU)   Eth      LACP      Eth1/16(P)   Eth2/16(D)

所以预计在最后一行打印“Not Ok”因为是 Eth2/16(D) 但它应该是 Eth2/16(P)

diff , comm -23 , 一些我已经尝试过的 grep 类型

试过这个

[ $(grep -cxFf pooutput.txt <(sort -u apdca-sd-rt01.txt)) = $(sort -u pooutput.txt | wc -l) ] && 
  echo ok || 
  echo not ok

试过这个

  if grep -ow '323   Po323(SU)   Eth      LACP      Eth1/14(P)   Eth2/14(P)
345   Po345(SU)   Eth      LACP      Eth1/15(P)   Eth2/15(P)
367   Po367(SU)   Eth      LACP      Eth1/16(P)   Eth2/16(P)' "apdca-sd-rt01.txt";then
echo Ok
else
echo Not OK 
fi
diff -U $(wc -l < pooutput.txt) pooutput.txt apdca-sd-rt01.txt | sed -n 's/^-//p' > fileC
diff -Ebv --new-line-format="" --unchanged-line-format="" <(sort pooutput.txt) <(sort apdca-sd-rt01.txt)

但是对于从 P 到 D 的如此小的变化,它有帮助

预期应该是“Not ok”,因为行不完全匹配。上面的一些都不能正常工作。

请帮忙

标签: bashshell

解决方案


您的第一个示例为我打印出“不好”。但我会保持简单,例如:

! diff pooutput.txt apdca-sd-rt01.txt > /dev/null && echo "NOT OK"

如果 diff 在提供的两个文件中发现差异,这将打印“NOT OK”。


推荐阅读