我发现自己必须学习一些 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
:
- 数组由字符串索引
- 内置变量
FILENAME
该脚本采用默认字段分隔符,并且blacklist.txt
每行包含一个字段。根据您的需要进行调整。
#!/bin/sh
awk '
FILENAME == "blacklist.txt" {
blacklist[$0] = 1
next
}
blacklist[$4] {
print $4, $0
}
' blacklist.txt -