Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Unix中基于值的比较_Bash_Shell_Unix_Awk - Fatal编程技术网

Bash Unix中基于值的比较

Bash Unix中基于值的比较,bash,shell,unix,awk,Bash,Shell,Unix,Awk,我有两个变量,如下所示 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 如果条件在查找rw值时失败,则a变量位于b变量中的位置1,但它位于变量b中的位置2 即使字段的顺序不同,如何比较这两行?此脚本似乎

我有两个变量,如下所示

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
如果条件在查找
rw
值时失败,则
a
变量位于
b
变量中的位置1,但它位于变量
b
中的位置2


即使字段的顺序不同,如何比较这两行?

此脚本似乎可以工作:

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"
            }'

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

这个脚本似乎可以工作:

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"
            }'

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

您是说第二次赋值开始
b=bg,rw,hard,…
?因此,您想检查两个变量中逗号分隔的字段列表是否相等,即使字段的顺序不尽相同?您有哪个shell(
bash
,或者其他什么)?
awk
是一种选择吗?@jonathanleffler。是的,我使用bash。我有awk。你是说第二个赋值开始
b=bg,rw,hard,…
?那么,你想检查两个变量中逗号分隔的字段列表是否相等,即使这些字段的顺序不同?您有哪个shell(
bash
,或者其他什么)?
awk
是一种选择吗?@jonathanleffler。没错,我用bash,我有awk。