【问题标题】:awk: cmd. line:1: (FILENAME=- FNR=1) fatal: attempt to access field -1awk:命令。 line:1: (FILENAME=- FNR=1) 致命:尝试访问字段 -1
【发布时间】:2016-08-27 15:23:54
【问题描述】:

我有一个根本不起作用的代码示例。我永久收到 awk 产生的错误。

queried_num=$(echo -e "$domains"|awk '{print $(NF-1)}'|awk -F. '{print $(NF-2) "." $(NF-1)}'|wc -l)

queried_domain=$(echo -e "$domains"|awk '{print $(NF-1)}'|awk -F. '{print $(NF-2) "." $(NF-1)}'|uniq)

我真的不知道出了什么问题以及如何解决它。

错误是:awk:cmd. line:1: (FILENAME=- FNR=1) 致命:尝试访问字段 -1

【问题讨论】:

  • 你到底想做什么???编辑您的问题以包含一些简洁、可测试的示例输入和预期输出,我们可以为您提供帮助。
  • 提示:如果您的输入在一行中没有至少一个.,那么NF-2 是什么?你可能想用awk -F. 'NF > 2 { print ... }' 之类的东西来限定你的awk 代码。

标签: bash awk


【解决方案1】:

您发布的 2 个脚本:

queried_num=$(echo -e "$domains"|awk '{print $(NF-1)}'|awk -F. '{print $(NF-2) "." $(NF-1)}'|wc -l)

queried_domain=$(echo -e "$domains"|awk '{print $(NF-1)}'|awk -F. '{print $(NF-2) "." $(NF-1)}'|uniq)

可以写成这样:

queried_num=$(echo -e "$domains"|wc -l)

queried_domain=$(echo -e "$domains"|awk '{n=split($(NF-1),f,/./); $0=f[n-2] "." f[n-1]} !seen[$0]++')

然后丢弃空行(这会导致您描述的问题)将是:

queried_num=$(echo -e "$domains"|grep '.'|wc -l)

queried_domain=$(echo -e "$domains"|awk '!NF{next} {n=split($(NF-1),f,/./); $0=f[n-2] "." f[n-1]} !seen[$0]++')

如果这不是您要查找的内容,请编辑您的问题以包含一些简洁、可测试的示例输入和预期输出,以便我们为您提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多