awk:cmd。 line:1:(FILENAME = - FNR = 1)致命:尝试访问字段-1

时间:2016-05-02 18:55:38

标签: bash awk

我有一个完全不起作用的代码示例。我永远得到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

1 个答案:

答案 0 :(得分: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]++')

如果那不是你想要的,那么编辑你的问题,包括一些简洁,可测试的样本输入和预期输出,以便我们为你提供帮助。