Bash 将当前行、行的输出和换行符打印到文件

Bash 将当前行、行的输出和换行符打印到文件

我有一堆域的 txt,我需要在其上运行 dig +short mx。

我已经设置了一个脚本来运行该命令,将其打印到 results.txt 中:

./dig_domain_mx.sh > results.txt

缺点是,我需要能够知道哪些域与每个结果相关,因此我的解决方案是打印脚本正在读取的当前行,然后打印该行的 dig 输出,然后添加换行符。

我似乎找不到任何暗示仅使用 dig 命令就可以做到这一点的内容,那么我将如何在我的 Bash 脚本中解决这个问题呢?


当前的 Bash 脚本,没什么特别的:

#!/bin/bash
dig -f domains.txt +short mx

答案1

为了避免运行文件的每一行,您可以这样做digread

dig -f domains.txt mx +noall +answer

这会给出如下输出:

stackexchange.com.      300     IN      MX      5 alt1.aspmx.l.google.com.
stackexchange.com.      300     IN      MX      1 aspmx.l.google.com.
stackexchange.com.      300     IN      MX      10 alt3.aspmx.l.google.com.
stackexchange.com.      300     IN      MX      10 alt4.aspmx.l.google.com.
stackexchange.com.      300     IN      MX      5 alt2.aspmx.l.google.com.
google.com.             600     IN      MX      10 aspmx.l.google.com.
google.com.             600     IN      MX      30 alt2.aspmx.l.google.com.
google.com.             600     IN      MX      20 alt1.aspmx.l.google.com.
google.com.             600     IN      MX      40 alt3.aspmx.l.google.com.
google.com.             600     IN      MX      50 alt4.aspmx.l.google.com.

您可以通过管道awk '{print $1,$5,$6}'删除300 英寸 MX

循环的替代方案while read可以是 xargs:

$ xargs -tn1 dig mx +short < domains.txt
dig mx +short stackexchange.com
1 aspmx.l.google.com.
10 alt3.aspmx.l.google.com.
10 alt4.aspmx.l.google.com.
5 alt2.aspmx.l.google.com.
5 alt1.aspmx.l.google.com.
dig mx +short google.com
20 alt1.aspmx.l.google.com.
30 alt2.aspmx.l.google.com.
40 alt3.aspmx.l.google.com.
50 alt4.aspmx.l.google.com.
10 aspmx.l.google.com.

相关内容