基于值的Unix比较

时间:2016-05-10 00:18:54

标签: bash shell unix awk

我有两个变量,如下所示。

CTRL + B

如果条件失败,因为它正在查找a=rw,bg,hard,timeo=600,wsize=1048576,rsize=1048576,nfsvers=3,tcp,actimeo=0,noacl,lock b=bg,rg,hard,timeo=600,wsize=1048576,rsize=1048576,nfsvers=3,tcp,actimeo=0,noacl,lock 变量中位置1的rw变量的a值,但它位于变量b中的位置2。

即使字段的顺序不相同,我如何比较两条线呢?

1 个答案:

答案 0 :(得分:2)

这个脚本似乎有效:

std::

示例运行:

a="rw,bg,hard,timeo=600,wsize=1048576,rsize=1048576,nfsvers=3,tcp,actimeo=0,noacl,lock"
b="bg,rg,hard,timeo=600,wsize=1048576,rsize=1048576,nfsvers=3,tcp,actimeo=0,noacl,lock"

{ echo "$a"; echo "$b"; } |
awk -F, \
   'NR == 1 {   for (i = 1; i <= NF; i++) a[$i] = 1 }
    NR == 2 {   for (i = 1; i <= NF; i++)
                {
                    if ($i in a)
                        delete a[$i]
                    else
                    {
                        mismatch++
                        print "Unmatched item (row 2):", $i
                    }
                }
            }
    END     {
                for (i in a)
                {
                    print "Unmatched item (row 1):", i
                    mismatch++
                }
                if (mismatch > 0)
                    print mismatch, "Mismatches"
                else
                    print "Rows are the same"
            }'

毫无疑问,使脚本更紧凑的方法,但代码是相当简单的。如果字段在第二行中出现两次并在第一行中出现一次,则第二行将报告为不匹配的项目。代码在处理第一行时没有检查重复项 - 这是一个很容易的练习。代码不打印输入数据以进行验证;它可能应该。