コマンド出力から2つの値を抽出する[冗長]

コマンド出力から2つの値を抽出する[冗長]

リスト内の各ドメインに対してWhoisルックアップを実行するスクリプトがあり、作成日と有効期限を抽出する必要があります。最初の部分がありますが、有効期限もわからないようです。whoisドメインを2回操作したくありません。

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 $whodawk '{print $3}'

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

3番目の言葉Versionはおそらくあなたが得るでしょう。また、array(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"

おすすめ記事