Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Linux 使用Awk将服务器名称从列表传递到nslookup_Linux_Bash_Unix_Awk_Nslookup - Fatal编程技术网

Linux 使用Awk将服务器名称从列表传递到nslookup

Linux 使用Awk将服务器名称从列表传递到nslookup,linux,bash,unix,awk,nslookup,Linux,Bash,Unix,Awk,Nslookup,背景故事:我正在制作一个脚本来检查域的黑名单,看看哪些域仍然有效(解析为IP),这样我就可以从列表中删除旧的非解析域。这个列表有数百万行,所以我使用awk(而不是“边读边做”)来提高速度 我正在尝试编写一个awk语句,它将查找域列表,并仅将可解析域列表打印到另一个列表 我几乎完成了,只是有一个部分卡住了-我如何指定nslookup使用的服务器 我有-port=54工作,但我也在尝试配置nslookup使用的DNS服务器 awk '{print $1}' /etc/pihole/gravity.l

背景故事:我正在制作一个脚本来检查域的黑名单,看看哪些域仍然有效(解析为IP),这样我就可以从列表中删除旧的非解析域。这个列表有数百万行,所以我使用awk(而不是“边读边做”)来提高速度

我正在尝试编写一个awk语句,它将查找域列表,并仅将可解析域列表打印到另一个列表

我几乎完成了,只是有一个部分卡住了-我如何指定nslookup使用的服务器

我有-port=54工作,但我也在尝试配置nslookup使用的DNS服务器

awk '{print $1}' /etc/pihole/gravity.list | nslookup -port=54| awk '/[Nn]ame/ {print $NF}'  >> /etc/pihole/gravityProcessed.list
如果我尝试指定-server=这不是有效的参数 如果我尝试将nslookup更改为使用1.1.1.1,而不是使用1.1.1.1作为服务器,它将尝试使用nslookup 1.1.1.1

awk '{print $1}' /etc/pihole/gravity.list | nslookup 1.1.1.1 | awk '/[Nn]ame/ {print $NF}'  >> /etc/pihole/gravityProcessed.list
问题是nslookup没有-server参数afaik(是的,它有-port参数) 所以我需要awk来做:

nslookup [INSERT HOST] server -port=
下面是/etc/pihole/gravity.list的示例

google.com
yahoo.com
skype.com
microsoft.com
我希望尝试合并的另一个选项是一个具有适当域语法的正则表达式,因为如果脚本命中一个格式不正确的域,则该脚本当前将终止。就像通过grep一样


(?=^.{4253}$)(^(?[a-zA-Z0-9](?:(?:[a-zA-Z0-9\-]){0,61}[a-zA-Z0-9])?+[a-zA-Z]{2,}$)
当您想使用替代名称服务器时,请参阅以下说明进行
nslookup

参数
在以下情况下进入交互模式:
1.未提供任何参数时(将使用默认名称服务器)
2.当第一个参数是连字符(-)而第二个参数是名称服务器的主机名或Internet地址时

所以试试看

nslookup - 1.1.1.1 < /etc/pihole/gravity.list 2>/dev/null | 
   awk '/[Nn]ame/ {print $NF}' >> /etc/pihole/gravityProcessed.list
nslookup-1.1.1/dev/null |
awk'/[Nn]ame/{print$NF}'>/etc/pihole/gravityProcessed.list

当您可以使用
cat
时,为什么在管道开始时使用
awk
?我试图解析的文件非常大-400万行。根据这篇文章,awk将比cat更快地解析它。我试着用“边读边读”一行一行地读,结果读得非常慢,不知道你想要什么。类似于
nslookup$(awk'{print$1}'/etc/pihole/gravity.list)-port=54
(仅当
awk
返回一个结果时)或
awk'{print$1}'/etc/pihole/gravity.list | xargs-L1-I{}-nslookup{port=54
?@Spencer我怀疑他们是否应该使用
cat
(谷歌UOOC)-如果nslookup需要gravity.list中的整行内容,则nslookup可以自己读取文件,或者可以使用
@p1r473重新读取输入,如果您发布一个小的gravity.list示例以及您需要从中提取的内容以传递给nslookup,则我们可以对该部分提供帮助,同样,如果您发布nslookup的输出以及您想要的内容,我们也可以提供帮助打印出来,这样我们也能帮上忙。太棒了,谢谢。这很有效。我只是忘了连字符。最后一行是:awk'{print$1}'/etc/pihole/gravity.list | nslookup-127.0.0.1-port=54/dev/null | awk'/[Nn]ame/{print$NF}>/etc pihole/gravityProcessed.list Walter,我是新来的,但我的问题是#2,它正在通过正则表达式验证域是否有效,这应该是一个新问题吗?应该是一个新问题。首先尝试一下简化的
sed-rn'/^([a-zA-Z0-9\-]){0,61}[a-zA-Z0-9]?\)+[a-zA-Z]{2,}$/p'/etc/pihole/gravity.list | nslookup-1.1.1.12>/dev/null | awk'/[Nn]ame/{print$NF}>/etc pihole/gravityProcessed.list
,也许你能解决这个问题。@p1r473你认为awk'>“/etc/pihole/gravity.list | nslookup-127.0.0.1-port=54
表示wrt,其中
nslookup
从何处获取输入?重要的是你要理解这一点。忘记好的/坏的域-重点是你发布的命令,我复制到我的评论中,你正在将awk命令的输出传输到nslookup的stdin(
awk'{print$1}'/etc/pihole/gravity.list | nslookup…
)同时将gravity.list的内容重定向到nslookup的stdin(
nslookup…
)。那么你打算从哪里读到它的stdin呢?我只是想确保您了解您使用的那些命令在做什么,这样您就可以看到,将管道导入和重定向到command.wrt坏域是没有意义的-如果您发布的regexp符合您的要求,那么您可以删除输入重定向并执行
grep-P“that regexp”| nslookup-1.1.1 2>/dev/null |改为awk“…”