bash - 存储 awk 查询的状态
问题描述
非常感谢您查看我的帖子。我正在寻找一个脚本来读取一个非常大的域列表,查看哪些解析,然后只存储解析到另一个文件的那些。
我目前在脚本中有这个:
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
我还尝试了一条额外的线:
/[Cc]an.t find/ { ++numResults; state="not found" }
但不知何故,列/行没有对齐。例如,在此行中添加会从输出中隐藏 total_garbage.com(total_garbage.com 不会 nslookup 到包含单词“Can.t find”的结果,所以我不知道发生了什么)
问题是
1 它没有处理“找不到”/“没有答案”的情况(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 最后打印了很多换行符(你可以在我的输出中看到空格)
我的脚本的示例输入:
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
我的脚本的所需输出:
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
实际输出:
google.ca
comingsoon.brightside.com
00038a.net
total_garbage.com
nslookup < input.txt
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
解决方案
这是您要尝试做的(使用cat nslookup.out |
您提供的示例进行测试,而不是在nslookup ... |
本地运行,这会产生与您希望 awk 脚本解析的输出不同的输出)?
$ 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
过去的尝试:
$ 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
或这个?
$ 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
推荐阅读
- pdf - 有没有办法使用 convertapi 将 docx 转换为仅图像的 pdf?
- python - 在熊猫中枢轴后重新索引
- c# - 如何在剃刀页面的属性内转义引号
- angular - 在离开网页之前警告用户未保存的更改角度
- c# - 我的 ASP.NET MVC 应用程序中的 Quartz 调度程序仅在 IIS 服务器上刷新网页/应用程序后才执行作业
- c# - 如何在 Xamarin Form 项目中获取 XAML 文件中描述的控件?
- regex - 匹配一行中的第 n 个单词
- sql - 有没有办法让这个查询成为一个循环或更有效?
- python - 使用分类变量运行 F 检验
- python - 将 pageToken 与 Google Analytics Reporting API v4 和 Python 结合使用