从命令的输出中提取两个值

从命令的输出中提取两个值

我有一个脚本,可以对列表中的每个域进行 Whois 查找,我需要提取创建日期和到期日期。我有第一部分,但似乎也无法获得到期日期。我不想whois两次运行域......

while IFS="," read domain rdate; do                     # Domain name and received date 
        cdate=( $(whois $domain | grep -m 1 -i Creation| awk -F" " '{print $3}') )
                # Harvest creation date from whois record for each domain 
                # expdate=??????
        printf "$domain,$cdate,$expdate \n"
done < "temp1.txt" 2> /dev/null # Sets the file to read in from and suppress error messages

我尝试将 whois 设置为“whod”,如下所示,但没有成功:

whod=$(whois $domain|awk '{print $0}')
expdate=( $(echo $whod |grep -m 1 -i 'Expiration Date' | awk -F" " '{print $3}') )
echo $expdate

答案1

首先, 中没有任何意义awk '{print $0}',只是打印每个输入行。代替使用whod=$(whois "$domain")。不管怎样,你的主要问题是你没有引用你的变量。这会导致各种各样的问题,最重要的是,当您 时echo $whod,您得到的是包含所有数据的一行。因此,您的应用程序awk '{print $3}'将应用于此行(为了清楚起见,缩写为简写):

Whois Server Version 2.0 Domain names in the .com and .net [ ... ]

第三个词Version大概就是你得到的。您还使用数组 ( expdate=( $( echo $whod ... ) )),我不明白为什么。可以有多个匹配吗?不管怎样,你的脚本的工作版本是:

while IFS="," read domain rdate; do
  whod="$(whois "$domain")"
  cdate="$(echo "$whod" | grep -m 1 -i Creation| awk -F" " '{print $3}')"
  expdate="$(echo "$whod" |grep -m 1 -i 'Expiration Date' | awk -F" " '{print $3}')"
  printf "$domain,$cdate,$expdate \n"
done < "temp1.txt"

相关内容