使用awk从两个变量中过滤数据

时间:2019-12-09 19:04:11

标签: awk

我有以下两个变量,一个变量($x)列出了几个目录的名称和状态,而另一个变量($y)仅包含目录的名称。我需要从第二个($y)变量的列表中打印目录名称,该列表名称在第一个OK OK OK变量的列表中没有($x)作为状态。

echo "$x"
/foo OK OK OK
/bar OK OK OK
/foo/bar OK OK OK
/bar/foo OK OK OK
/foobar OK OK OK
/bar/foo OK OK OK
/bad/dir NA NA NA


echo "$y"
/foo
/bar
/foo/bar
/bar/foo
/foobar
/bar/foo
/bad/dir
/another/bad/dir

我正在尝试打印状态为“ OK OK OK”的目录名称,但出现以下错误:

awk 'NR==FNR{name[$1]=$1;next} ("OK"FS"OK"FS"OK" in $2FS$3FS$4){print $1}' <(echo "$y") <(echo "$x")
awk: cmd. line:1: NR==FNR{name[$1]=$1;next} ("OK"FS"OK"FS"OK" in $2FS$3FS$4){print $1}
awk: cmd. line:1:                                                ^ syntax error
awk: cmd. line:1: NR==FNR{name[$1]=$1;next} ("OK"FS"OK"FS"OK" in $2FS$3FS$4){print $1}
awk: cmd. line:1:                                                           ^ syntax error

我期望以下输出:

/bad/dir
/another/bad/dir

注意:这是原始数据集的缩小版本。

1 个答案:

答案 0 :(得分:3)

$ awk 'NR==FNR{stat[$1]=$2 FS $3 FS $4; next} stat[$1]!="OK" FS "OK" FS "OK"' <(printf '%s\n' "$x") <(printf '%s\n' "$y")
/bad/dir
/another/bad/dir