我有一个完全不起作用的代码示例。我永远得到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
答案 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]++')
如果那不是你想要的,那么编辑你的问题,包括一些简洁,可测试的样本输入和预期输出,以便我们为你提供帮助。