使用grep就像awk中的条件一样

时间:2014-07-18 21:41:43

标签: linux bash awk grep

我可以在我的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" }'

4 个答案:

答案 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}'

说明:

  1. ^行的开头
  2. $行尾
  3. 如果匹配/^search-string$/ ,则
  4. grep -Fxq返回true grep的

    -x使用锚点。我相信-F是多余的。

答案 3 :(得分:0)

如果grepegrep不足以进行文字过滤,那么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”文本过滤所有行,并将在该文本后打印所有内容。