Bash

Bash 列印目前行、行的輸出和換行符到文件

  • April 28, 2016

我有一堆需要執行 dig +short mx 的域的 txt。

我設置了一個腳本來執行命令,將其列印到 results.txt 中:

./dig_domain_mx.sh > results.txt

缺點是,我需要能夠知道哪些域與每個結果相關,所以我的解決方案是列印腳本正在讀取的目前行,然後列印該行的 dig 輸出,然後添加換行符。

我似乎找不到任何暗示這可能僅使用 dig 命令的內容,那麼我將如何在我的 Bash 腳本中解決這個問題?


目前的 Bash 腳本,沒什麼特別的:

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

為避免執行文件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 IN 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.

引用自:https://unix.stackexchange.com/questions/279749