【问题标题】:awk extract number from fieldawk 从字段中提取数字
【发布时间】:2015-11-26 14:33:54
【问题描述】:

我想提取字段包含的数字。

例如提交$5 看起来像[u8789] 我需要8789

我已经知道可以使用echo "[u8789]"|awk -F'[^0-9]*' '$0=$2' 完成

但是我在 awk 脚本中也需要同样的东西,而且我还没有发现如何在不从 shell 调用 awk 的情况下获得预期的结果。

谢谢

【问题讨论】:

  • 那你想用什么?问题不清楚
  • 所以你正在从文件中读取?请编辑您的 Q 以包含小样本数据(文件)以及您希望/需要如何调用 awk .. 通常是 awk -f prog.awk dataFile.csv 祝你好运。

标签: linux bash shell awk


【解决方案1】:

我会使用 grep:

grep -o '[[:digit:]]\+'

当应该使用awk 而你有gawk 时,你可以使用FPAT 变量:

gawk '{print $1}' FPAT='[0-9]+'

在没有FPAT 或分隔符的帮助下,“从内部” awk 脚本,我会使用gsub(),如下所示:

awk '{gsub(/[^[:digit:]]/, "", $0)}1'

进一步阅读:

【讨论】:

  • 是的,它很好,但是它是一个 GNU 扩展。
  • 这不是问题,我们到处都有 gnu awk!
  • 很遗憾没有。 BSD 的 awk 通过 MacOS 广泛部署。这意味着默认的 Mac 无法理解。
【解决方案2】:

(g)awk 脚本

你的问题不是很清楚...

  • 我相信你想要一个脚本。

以下 2 个示例

I) 获取每行的前 2 个数字,(在 @hek2mgl 之后)

#!/usr/bin/gawk -f

BEGIN  { FPAT="[0-9]+"}
       { print $1,$2}

II) 获取括号内的所有数字[...]

#!/usr/bin/gawk -f

BEGIN  { RS="["; FS="]"; }
       { print $1}

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多