Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 存储awk查询的状态_Bash_Loops_Awk_Sed_Nslookup - Fatal编程技术网

Bash 存储awk查询的状态

Bash 存储awk查询的状态,bash,loops,awk,sed,nslookup,Bash,Loops,Awk,Sed,Nslookup,非常感谢你看我的帖子。我正在寻找一个脚本,读取一个非常大的域列表,查看哪些域解析,然后只存储解析到另一个文件的域 我目前有一个脚本: 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/ { ++numR

非常感谢你看我的帖子。我正在寻找一个脚本,读取一个非常大的域列表,查看哪些域解析,然后只存储解析到另一个文件的域

我目前有一个脚本:

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
但不知何故,列/行没有对齐。例如,在此行中添加会从输出中隐藏total_garbage.com(total_garbage.com不会查找到包含单词“Can.t find”的结果,因此我不知道发生了什么)

问题是

1未处理“找不到”/“没有答案”案例(00038a.net仍在打印)

2未处理“NXDOMAIN”案例(total_garbage.com仍在打印中)

3未处理“名称”案例(输出中缺少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-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
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
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&1|
猫出|
awk'
NR==FNR{list[NR]=$0;next}
/^名称:/{state=“found”}
/[Cc]an\047t find/{state=“not found”}
!NF&(状态!=“”){
++numResults
如果(状态==“已找到”){
打印列表[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-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 gravity.list
comingsoon.brightside.com
total_.com
谷歌网站
$cat tst.sh
#!/bin/env bash
nslookup&1|
awk'
NR==FNR{list[NR]=$0;next}
/^名称:/{result=$NF}
/不存在的域/{result=“未找到”}
结果!=“{打印列表[++numResults],”->“,结果;结果=”“}”
'重力.列表-
$./tst.sh
com->elb-brightside-17469.aptable.in
total_garbage.com->未找到
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
$cat tst.sh
#!/bin/env bash
nslookup&1|
awk'
NR==FNR{list[NR]=$0;next}
/^名称:/{++numResults;state=“found”}
/不存在的域/{++numResults;state=“未找到”}
state==“找到”{打印列表[numResults];state=”“}
'重力.列表-
$./tst.sh
comingsoon.brightside.com
谷歌网站

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

$cat tst.sh
#!/bin/env bash
#nslookup&1|
猫出|
awk'
NR==FNR{list[NR]=$0;next}
/^名称:/{state=“found”}
/[Cc]an\047t find/{state=“not found”}
!NF&(状态!=“”){
++numResults
如果(状态==“已找到”){
打印列表[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-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 gravity.list
comingsoon.brightside.com
total_.com
谷歌网站
$cat tst.sh
#!/bin/env bash
nslookup&1|
awk'
NR==FNR{list[NR]=$0;next}
/^名称:/{result=$NF}
/不存在的域/{result=“未找到”}
结果!=“{打印列表[++numResults],”->“,结果;结果=”“}”
'重力.列表-
$./tst.sh
com->elb-brightside-17469.aptable.in
total_garbage.com->未找到
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
$cat tst.sh
#!/bin/env bash
nslookup&1|
awk'
NR==FNR{list[NR]=$0;next}
/^名称:/{++numResults;state=“found”}
/不存在的域/{++numResults;state=“未找到”}
state==“找到”{打印列表[numResults];state=”“}
'重力.列表-
$./tst.sh
comingsoon.brightside.com
谷歌网站

就像以前一样-如果您希望您的问题包括简明的、可测试的样本输入(可能是
nslookup
中有问题的输出)和您希望帮助编写的脚本的预期输出(可能是
awk
中管道之后的
nslookup
)然后我们可以最好地帮助您做到这一点。shell脚本中的第一行包括
awk'END{print NR}'/etc/pihole/gravity.cleaned | awk'{print$1}'
,这意味着“运行awk脚本打印gravity.cleaned中的行数,然后将该数字传输到第二个awk脚本以打印该数字的第一个空白分隔字段(因为它是一个数字,所以没有空格分隔的恶魔)”。谢谢我把它改成了
END=$(awk'END{print NR}'/etc/pihole/gravity.cleaned)
并再次输入。感谢您的耐心确保您在问题中更改了它,而不仅仅是在计算机上的某个本地文件中,没有人能看到您的问题。您的所有脚本都在测试“名称”,但没有“名称”在您发布的示例输入中,您的awk脚本无法将
comingsoon.brightside.com
转换为
elb-brightside-17469.aptable.in
以您目前发布的内容为准。请让我们清楚、简单地帮助您。就像以前一样-如果您的问题包括简洁、可测试的示例输入(可能是
nslookup
)的有问题的输出,以及您想要帮助编写的脚本的预期输出(可能是
nslookup
管道之后的
awk
脚本),那么我们可以最好地帮您做到这一点。shell脚本的第一行包括
awk'END{print NR}/etc/pihole/gravity.cleaned | awk'{print$1}'
m