当正则表达式匹配或不匹配时,调整awk以打印不同的东西

时间:2012-03-26 13:25:36

标签: linux bash awk

所以我试图从数百个不同的日志文件中自动完成一个非常繁琐的数据收集过程。以下脚本:

awk '/Loop/ { printf $4, }' log*weak*"$factor"x

将搜索“循环时间为$ time”的行并打印时间

我现在试图处理的情况是,当出现运行时错误,并且从未写过日志。也就是说,日志文件在那里,但它没有文本。问题是上面的脚本只会跳过日志。我希望它输出一个空格字符(以便更容易地对齐所有这些中创建的csv)。

当有/ Loop /匹配时,有没有办法打印$ 4(时间),但是当它不匹配时有“,”,

2 个答案:

答案 0 :(得分:3)

不需要found变量:

awk '
  /Loop/ {
    print $4
  } 

  END {
    if (! $0) {
      print " "
    }
  }
' YOURINPUTS

阅读完评论后,这个简单的片段应该可以解决问题:

awk '{print ($4) ? $4 : " "}' FILE.CSV

这是像C中的三元运算符。

答案 1 :(得分:2)

这个怎么样:

awk '
  FILENAME != oldf { oldf = FILENAME ; If ( found != 0 ) { prínt " " } ; 
                     found = 0 }
  /Loop/ {
    print $4, ;
    found++ 
  } 

  END {
    if ( ! found ) {
      print " "
    }
  }
' YOURINPUTS