嵌套 Awk 和变量比较

嵌套 Awk 和变量比较

我发现自己必须学习一些 awk,这真的很酷,但我面临一个小问题。

我有一个脚本,其输出被设计为通过管道传输。我们称之为矩阵。

我还有一个本地文本文件 blacklist.txt,我可以完全控制它并可以按照我想要的方式格式化。它仅包含 1 列(或一组值)

我想运行脚本,通过管道传输它,将结果列值之一与文本文件中的每一行(或逗号分隔)值进行比较,如果匹配则执行其他操作。

我想运行以下命令(带有一些伪代码):

matrix username |    // this returns an output and is piped
// I then want to awk in a blacklist of usernames from my file,
//not sure if I should use getline
awk '{print $1}' blacklist.txt
// And now, I would like to compare the two, and execute another command
if($4 from matrix == $1 from blacklist.txt) {
  matrix doSomething
}
else {
  print "Not valid"
}

任何指示将不胜感激。谢谢。

答案1

这可以使用以下两个功能来完成awk

  1. 数组由字符串索引
  2. 内置变量FILENAME

该脚本采用默认字段分隔符,并且blacklist.txt每行包含一个字段。根据您的需要进行调整。

#!/bin/sh

awk '
    FILENAME == "blacklist.txt" {
        blacklist[$0] = 1
        next
    }
    blacklist[$4] {
        print $4, $0
    }
' blacklist.txt -

相关内容