【问题标题】:how to calculate percentage difference with cmp command如何使用 cmp 命令计算百分比差异
【发布时间】:2019-10-09 21:34:32
【问题描述】:

我知道 linux 中的 cmp 命令用于逐字节比较,我们可以在此基础上获得百分比差异吗? 示例我有两个文件 a1.jpg 和 a2.jpg 因此,当我使用 cmp 比较这两个文件时。我可以得到这两个文件之间差异的百分比吗? 示例:a1.jpg -> 有 1000 个字节,a2.jpg 有 1021 个(以更大的文件作为参考) 因此可以获得两个文件之间的百分比差异,即字节差异数/总字节数较大

寻找一些shell脚本sn-p。提前致谢

【问题讨论】:

  • cmp 在第一次比较时停止比较。这不是一个工具。我认为你必须自己写一个。我相信你可以逐字节读取两个文件,比较,增加一些“difference_count”变量,比较文件的大小并计算除法。你试过什么?有cmp -icmp -b,但我觉得这将是一个很好的解决方案。此外,对于每次更改,cmp 都需要重新打开文件,然后使用-i 进行 fseek,这会比在简短的 C 程序中实现要慢。
  • 我也可以看到这样的方式:使用换行符打印两个文件中的每个字节,使用 join --nocheck-order 比较它们并从两个流中打印不匹配的行。然后计算行数,这将是不同的字节数。

标签: shell scripting difference cmp


【解决方案1】:

您可以创建一个包含以下内容的文件脚本 - 让我们将此文件称为percmp.sh

#!/bin/sh
DIFF=`cmp -l $1 $2 | wc -l`
SIZE_A=`wc -c $1 | awk '{print $1}'`
SIZE_B=`wc -c $2 | awk '{print $1}'`
if [ $SIZE_A -gt $SIZE_B ]
then
    MAX=$SIZE_A
else
    MAX=$SIZE_B
fi
echo $DIFF/$MAX*100|bc -l

确保它将使用 Linux 加密保存。 然后使用两个文件名作为参数运行它。例如,假设percmp.sh 和这两个文件在同一个文件夹中,您运行命令:

sh percmp.sh FILE1.jpg FILE2.jpg

否则,您需要指定脚本和文件的完整路径。

代码完全符合您的需要,如果您需要参考:

  • #!/bin/sh 告诉如何解释文件
  • cmp -l 列出了所有不同的叮咬
  • wc -l行数(代码中:不同咬合列表的长度->不同字节数)
  • wc -c 文件大小
  • awk 文本解析(仅获取文件大小)
  • -gt Greater Than
  • bc -l 执行输入的除法

希望我能帮上忙!

【讨论】:

  • 哇,太好了。而不是wc -c $1 | awk '{print $1}',您可以只使用wc -cc <"$1"。记得引用你的变量。使用反引号 ` 很棘手,它的用法是 discouraged - 请改用 $( .. )
猜你喜欢
  • 2020-11-27
  • 1970-01-01
  • 2021-06-17
  • 2021-01-05
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多