【问题标题】:parsing a log file with awk使用 awk 解析日志文件
【发布时间】:2014-10-27 12:27:08
【问题描述】:

我正在尝试使用以下代码解析日志文件:

    if [[ $line -match "=====.*" ]]; then
        awk $2 = $vFiler;
        echo "$vFiler";

解释:

有些行以 ===== 或 'vol/...' 之类的模式开头,后跟名称 我想找到所有以===== 或'vol/...' 开头的行,并将后面的字符串设置为一个变量,但我真的很难做到,我想到了一个带有 awk 的 if 命令(我知道 - match 不是真正的命令)。

输入看起来像这样:

===== vfiler0
/vol/vol0   

===== vFiler1
/vol/vol1

输出应该是:

vFiler, Type
vFiler0, /vol/vol0
vFiler1, /vol/vol1

你们能帮帮我吗?我正在尝试在 bash 脚本中执行此操作 是否有可能像我上面尝试的那样获得“如果...”?

【问题讨论】:

  • 提供一些输入和预期输出的例子。
  • 你知道 awk 是如何工作的吗?这应该用什么语言写?
  • ===== vfiler0 /vol/vol0 ===== vFiler1
  • 编辑您的问题以更好地描述您正在尝试做的事情并在其中包含输入/输出。
  • 您在问题的底部建议您的真正要求可能更复杂。也许您应该编辑您的问题以解释它们是什么,因为最佳建议可能会因具体细节而异。

标签: bash awk


【解决方案1】:

我会使用以下内容:

awk -v RS="=====" -v OFS="," 'BEGIN {print "vFiler", "Type" } NF{print $1, $2}' file

返回:

vFiler,Type
vfiler0,/vol/vol0
vFiler1,/vol/vol1

我们所做的是将记录分隔符设置为=====。这样,每次都会处理====的块。然后,只要有至少一个 (NF),我们就会打印第一个和第二个字段。

【讨论】:

  • 非常感谢,没想到它可以与单个 awk 命令一起使用
【解决方案2】:
awk '/=====/{print $2}' inputFile

将输出为

vfiler0
vFiler1

【讨论】:

【解决方案3】:

这有帮助吗?

grep -Po '^={5}\s+\K.*' file

【讨论】:

  • 对不起,我没有在我的问题中写下它......但是是否可以使用 if[...] 来做到这一点?因为我想检查的不仅仅是 =====
  • @howdoesthiswork 首先,写下完整的需求。
猜你喜欢
  • 1970-01-01
  • 2017-11-10
  • 2012-04-20
  • 2022-01-25
  • 2013-11-26
  • 2021-04-24
  • 2020-09-13
  • 1970-01-01
  • 2011-01-17
相关资源
最近更新 更多