【问题标题】:Shell script to compare multiple files用于比较多个文件的 Shell 脚本
【发布时间】:2018-07-30 18:25:08
【问题描述】:

我正在比较脚本中的两个文件。使用命令

comm -3 123.txt 321.txt" 

这两个文件123和321只有数字内容。

我也用过

diff -ibw abc.txt cba.txt

这些文件 abc 和 cba 包含字母数字内容

如果没有不匹配,则不打印输出,你能帮我写一个如下的条件吗?

如果没有区别我需要打印files match 如果有差异,我想打印 mismatch found 以及不匹配的输出。

【问题讨论】:

  • 来自man diff,退出状态为0 if inputs are the same, 1 if different ..您可以使用它...此外,如果您使用-s 选项,您将收到一条消息,指出输入时文件相同是一样的

标签: shell awk diff difference comm


【解决方案1】:

如果使用GNU bash,请使用内置列表运算符&&|| 来执行此操作。

diff -ibw abc.txt cba.txt &>/dev/null && echo "Files Match" || echo "Files do not match"

来自man bash

AND 和 OR 列表是多个管道之一的序列,分别由 &&││ 控制运算符分隔。和和 OR 列表以左结合性执行。 AND 列表的形式为

          command1 && command2

command2 当且仅当command1 返回退出状态为零时才会执行。

   An OR list has the form

          command1 ││ command2

command2 当且仅当command1 返回非零退出状态时才会执行。 AND 和 OR 列表的返回状态为退出状态 最后的 在列表中执行的命令。

【讨论】:

    【解决方案2】:

    在 shell 脚本中很容易。当您在 Unix/Linux 中执行 diff 命令时,如果没有差异则返回 0,如果差异则返回 1,您可以在系统变量 $? 中检查。

    例如:-

    #!/bin/bash
    
    diff abc.txt cba.txt  > /dev/null 2>&1 #not to print the out put of from diff command
    
    if [ $? -eq 0 ]; then
       echo "files match"  
    else
       echo "mismatch found"
    fi   
    

    但是,如果您使用不同的命令,只需在成功和不成功时使用echo $? 检查退出值,并相应地更改您的if 条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多