首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储awk查询的状态

存储awk查询的状态
EN

Stack Overflow用户
提问于 2019-10-05 17:01:09
回答 1查看 114关注 0票数 1

非常感谢你看我的线。我希望创建一个脚本,它读取一个非常大的域列表,查看哪些域解析,然后只存储那些解析到另一个文件的域。

我目前在一个脚本中有这样的内容:

代码语言:javascript
复制
nslookup < input.txt - 1.1.1.1 -port=53 2>&1 |
awk '
NR==FNR { list[NR] = $0; next }
/^Name:/                { ++numResults; state="found" }
/Non-existent domain/   { ++numResults; state="not found" }
/NXDOMAIN/              { ++numResults; state="not found" }
/No answer/             { ++numResults; state="not found" }
state == "found"        { print list[numResults]; state="" }
' input.txt - >> output.txt

我还尝试了一句额外的话:

代码语言:javascript
复制
/[Cc]an.t find/         { ++numResults; state="not found" }

但不知何故,列/行没有排成一排。例如,在这一行中添加将total_garbage.com隐藏在输出中(total_garbage.com不查找包含单词“can.tfind”的结果,因此我不知道发生了什么事)

问题是

它没有处理“找不到”/“没有答案”的情况(00038a.net仍在打印)

2它不处理'NXDOMAIN‘案件(total_garbage.com仍在打印)

3它没有处理输出中缺少的“名称”( (0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info )情况)

4在结尾处打印了许多换行符(您可以在输出中看到空格)

示例输入到我的脚本:

代码语言:javascript
复制
google.ca
comingsoon.brightside.com
00038a.net
0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info
total_garbage.com

我的脚本的期望输出:

代码语言:javascript
复制
google.ca
comingsoon.brightside.com
0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info

实际产出:

代码语言:javascript
复制
google.ca
comingsoon.brightside.com
00038a.net
total_garbage.com

查找< input.txt

代码语言:javascript
复制
Server:     127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
Name:   google.ca
Address: 216.58.192.131
Server:     127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
comingsoon.brightside.com   canonical name = elb-brightside-17469.aptible.in.
Name:   elb-brightside-17469.aptible.in
Address: 54.86.171.167
Name:   elb-brightside-17469.aptible.in
Address: 54.174.154.102
Server:     127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
*** Can't find 00038a.net: No answer
Server:     127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
Name:   0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info
Address: 178.162.203.226
Name:   0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info
Address: 178.162.203.211
Name:   0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info
Address: 178.162.203.202
Name:   0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info
Address: 85.17.31.122
Name:   0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info
Address: 85.17.31.82
Name:   0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info
Address: 5.79.71.225
Name:   0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info
Address: 5.79.71.205
Name:   0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info
Address: 178.162.217.107
Server:     127.0.0.1
Address:    127.0.0.1#53

** server can't find total_garbage.com: NXDOMAIN
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-05 17:35:47

这就是您想要做的(使用cat nslookup.out |来测试所提供的示例,而不是在本地运行nslookup ... |,这将产生与您希望awk脚本解析不同的输出)?

代码语言:javascript
复制
$ cat tst.sh
#!/bin/env bash

#nslookup < input.txt 2>&1 |
cat nslookup.out |
awk '
NR==FNR { list[NR] = $0; next }
/^Name:/                { state="found" }
/[Cc]an\047t find/      { state="not found" }
!NF && (state != "") {
    ++numResults
    if ( state == "found" ) {
        print list[numResults]
    }
    state=""
}
' input.txt -

$ ./tst.sh
google.ca
comingsoon.brightside.com
0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info

过去的尝试:

代码语言:javascript
复制
$ cat gravity.list
comingsoon.brightside.com
total_garbage.com
google.com

$ cat tst.sh
#!/bin/env bash

nslookup < gravity.list 2>&1 |
awk '
NR==FNR { list[NR] = $0; next }
/^Name:/                { result = $NF }
/Non-existent domain/   { result = "not found" }
result != "" { print list[++numResults], "->", result; result="" }
' gravity.list -

$ ./tst.sh
comingsoon.brightside.com -> elb-brightside-17469.aptible.in
total_garbage.com -> not found
google.com -> google.com

还是这个?

代码语言:javascript
复制
$ cat tst.sh
#!/bin/env bash

nslookup < gravity.list 2>&1 |
awk '
NR==FNR { list[NR] = $0; next }
/^Name:/                { ++numResults; state="found" }
/Non-existent domain/   { ++numResults; state="not found" }
state == "found" { print list[numResults]; state="" }
' gravity.list -

$ ./tst.sh
comingsoon.brightside.com
google.com
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58250515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档