我可以在我的awk之外使用grep -Fxq search-string text-file
,它可以按照我期望的方式工作(在How to test if string exists in file with Bash shell?找到)。但是,当我尝试在awk中使用相同的grep命令作为if语句时,它似乎什么都不做。这是我正在尝试的基本用法:
cat /var/log/somelogfile | awk '{ if (grep -Fxq $1 textfile) print "useful command $1" }'
答案 0 :(得分:1)
您可以使用awk' system
功能:
cat /var/log/somelogfile | awk '{ if (system("grep -Fxq " $1 " textfile")) print "useful command " $1; }'
请参阅docs。
答案 1 :(得分:1)
它看起来像你要做的是:
awk '
NR==FNR { strings[$0]; next }
{
for (string in strings) {
if ( index($0,string) ) {
print "useful command", $1
next
}
}
}
' textfile /var/log/somelogfile
我们肯定知道是否/何时发布一些样本输入/输出。
答案 2 :(得分:0)
没有必要,你可以使用锚点:
awk '/^search-string$/ {do something}'
说明:
^
行的开头$
行尾/^search-string$/
,则grep -Fxq
返回true
醇>
grep的 -x
使用锚点。我相信-F
是多余的。
答案 3 :(得分:0)
如果grep
或egrep
不足以进行文字过滤,那么perl one liner可能会更容易。 perl
提供有用的command line options,例如-n -e
,它会在while
循环中隐式执行您的任意命令。
例如:
perl -ne 'if (/some line (.*)/) {print "useful command: $1\n"}' /var/log/somelogfile
将使用“some line”文本过滤所有行,并将在该文本后打印所有内容。