【问题标题】:Can I use a different delimiter in different code blocks in awk?我可以在 awk 的不同代码块中使用不同的分隔符吗?
【发布时间】:2019-01-22 19:39:25
【问题描述】:

在 AWK 中我可以设置多个分隔符吗,如下例所示

BEGIN { Actions}
{ACTION-1} # here delimiter will be comma ","
{ACTION-2} # here delimiter will be colon":"
{ACTION-1} # here delimiter will be space " "
END { Actions }

【问题讨论】:

  • 你匹配三个不同格式的行吗?这是参考的输入数据是什么样的? (如果您想在一个分隔符上获取拆分结果,然后将 其中一个字段 拆分到另一个,那就更清楚了)。
  • AWK multiple delimiter的可能重复
  • 标记为重新打开。这个问题是关于对不同的块使用不同的分隔符。链接的问题是关于在同一块中使用多个替代分隔符。这是一个微妙的区别,但它可能很重要。 (答案会有所不同)
  • 这绝对不是stackoverflow.com/q/12204192/608639的复制品。这不是一个好问题,因为它缺少示例输入/输出,但它不是重复的。

标签: linux bash shell awk


【解决方案1】:

并非如此,但您可以做的是明确拆分您正在查看的行。那将是:

{ split($0, parts, ","); ACTION-1 }
{ split($0, parts, ":"); ACTION-2 }
{ split($0, parts, " "); ACTION-1 }

这样您可以获得您所追求的值,但它们可以作为parts[1], parts[2], ... 而不是$1, $2, ... 访问。

【讨论】:

  • 这个答案比我的好很多。
【解决方案2】:

是的,你可以:

BEGIN { Actions}
{FS=","; $0=$0; ACTION-1} # here delimiter will be comma ","
{FS=":"; $0=$0; ACTION-2} # here delimiter will be colon":"
{FS=" "; $0=$0; ACTION-1} # here delimiter will be space " "
END { Actions }

将任何内容分配给$0 会导致 awk 使用FS 的当前值重新进行字段拆分,因此它之前已经将记录拆分为字段的事实是无关紧要的。

话虽如此 - 几乎可以肯定,无论您尝试做什么,都有更好的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2023-03-24
    • 2021-01-29
    • 2012-08-18
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多