【问题标题】:awk or sed - print multiple pattern with variable in one lineawk 或 sed - 在一行中打印多个带有变量的模式
【发布时间】:2016-01-04 19:42:21
【问题描述】:
$arrays 中的数组;做 count=$(sed '/Error/!d;/$array/!d' $logfile | wc -l) #awk -v array=$array "/Error/ && /$array/" $logpath | wc -l 回声“$count - $array” 完毕

我知道如何使用 grep 执行此操作,但我无法使用它。两种模式必须在同一行。我正在循环一个包含字符串的数组。非常感谢您的帮助。

编辑: 我正在寻找字符串“Error”和 $array - 其中包含我正在循环的字符串。我正在搜索一个文件,并希望打印 both 字符串“Error”和 one line 中变量“$array”的值的所有行。

【问题讨论】:

  • 显示示例输入和预期输出
  • 抱歉,您的问题不清楚。你到底想完成什么?示例输入和输出会很好。

标签: arrays bash variables awk sed


【解决方案1】:

/.../ 不能包含对awk 变量的引用;你需要使用等价的

$0 ~ array

改为。

awk -v "array=$array" -v count=0 '/Error/ && $0 ~ array { count++} END {print count }'

(也消除了对wc 的需要)。

【讨论】:

  • 谢谢!有没有办法打印“0”而不是什么?
  • 是的,您只需要将 count 初始化为 0。(我错误地认为任何未定义的变量在任何情况下都会默认为 0。)我已经更新了答案。
  • 成功了。谢谢!这就是我一直在寻找的答案。
  • 嗯,这可能是您正在寻找的东西,但它似乎不太可能是正确的解决方案,因为您会从 shell 循环中调用它,而这总是错误的方法。您尚未向我们展示输入和输出,但您极有可能在一个简短、简单、高效、可移植的 awk 脚本中完成所有工作。您不需要初始化计数,只需将 END 更改为print count+0
猜你喜欢
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 2013-03-12
  • 2011-07-20
  • 1970-01-01
相关资源
最近更新 更多