为什么awk"not in"数组就像awk"in"数组一样工作?

mer*_*011 23 awk gawk

这是一个awk脚本,它尝试根据第一列设置两个文件的差异:

BEGIN{
    OFS=FS="\t"
    file = ARGV[1]
    while (getline < file)
        Contained[$1] = $1
    delete ARGV[1]
    }
$1 not in Contained{
    print $0
}
Run Code Online (Sandbox Code Playgroud)

这是TestFileA:

cat
dog
frog
Run Code Online (Sandbox Code Playgroud)

这是TestFileB:

ee
cat
dog
frog
Run Code Online (Sandbox Code Playgroud)

但是,当我运行以下命令时:

gawk -f Diff.awk TestFileA TestFileB
Run Code Online (Sandbox Code Playgroud)

我得到的输出就像脚本包含"in"一样:

cat
dog
frog
Run Code Online (Sandbox Code Playgroud)

虽然我不确定"不在"是否是我的意图的正确语法,但我很好奇为什么它的行为与我写"in"时的行为完全相同.

kev*_*kev 29

我找不到任何关于的文件element not in array.

试试!(element in array).


我猜:awk看作not是一个未初始化的变量,所以not被评估为一个空字符串.

$1 not == $1 "" == $1
Run Code Online (Sandbox Code Playgroud)


小智 18

我想出了这一个.(数组中的x)返回一个值,所以要做"不在数组中",你必须这样做:

if ( x in array == 0 )
   print "x is not in the array"
Run Code Online (Sandbox Code Playgroud)

或者在你的例子中:

($1 in Contained == 0){
   print $0
}
Run Code Online (Sandbox Code Playgroud)