当我运行代码时
echo "linux.com ," $(dig +short ns linux.com | awk -v RS='' '{gsub("n", ", "); print $0}')
结果
linux.com , ns1.dnsimple.com., ns2.dnsimple.com., ns3.dnsimple.com., ns4.dnsimple.com.
当我在循环中运行时,它不起作用,请建议
#!/bin/bash
#/fullpath/dns.sh
#finding DNS of all websites
yesterday=$(date --date "1 days ago" +%F)
while IFS= read -r line
do
echo "$line," $(dig +short ns $line | awk -v RS='' '{gsub("n", ", "); print $0}') >> $yesterday.csv
done < /fullpath/domains.csv
它只给我域列表
000caua5456aod4das98dcp10ad0456a0xa.club
,
007hertz.com
,
0086sp.com
,
00q198.com
,
domains.csv文件
000caua5456aod4das98dcp10ad0456a0xa.club
007hertz.com
0086sp.com
00q198.com
编辑
我所理解的是用"回车"(带新行(读取$line
问题是/fullpath/domains.csv
带有DOS格式,因此您可以使用IFS:解决此问题
#!/bin/bash
#/fullpath/dns.sh
#finding DNS of all websites
yesterday=$(date --date "1 days ago" +%F)
while IFS=$'r'"$IFS" read -r line
do
echo "$line," $(dig +short ns "$line" | awk -v RS='' '{gsub("n", ", "); print $0}') >> $yesterday.csv
done < /fullpath/domains.csv
或者,您可以在运行脚本之前执行dos2unix /fullpath/domains.csv
。
适用于添加缺失的双引号:
#!/usr/bin/env bash
yesterday=$(date --date "1 days ago" +%F)
while IFS= read -r line
do
echo "$line," "$(dig +short ns "$line" | awk -v RS='' '{gsub("n", ", "); print $0}')"
done < /fullpath/domains.csv > "$yesterday.csv"
替代您的脚本:
xargs -l1 -c 'set -- "$0" $(dig +short ns "$0"); IFS=,; echo "$*"' </fullpath/domains.csv sh >"$(date --date "1 days ago" +%F).csv"