カール要求の出力を2つの別々のコマンドに送信する方法

カール要求の出力を2つの別々のコマンドに送信する方法

一部のデータを抽出できるように、カール要求の出力をgawkにパイプしています。カール要求で生成されたhtmlファイルを検索すると、gawkコードはすでに機能します。ただし、日付変数を2つだけ割り当てるだけで、簡単な内部編集が必要です。ティー使用と公正交換を悩んでみました。 gawkとコマンド置換を使用して2つの異なる変数が割り当てられるように、カールリクエストの出力を分岐する方法はありますか?

ここに私のコードスニペットがあります。カールリクエストの詳細全体を非表示にしましたが、最も古いシーケンス、日付、最新のシーケンス、日付が別々の行に含まれているHTMLレポートが表示されます。 gawk はデータに対してテストされました。

curl -k -q "https://user:password@ipaddress/report" 

上記のコマンドの出力を下の2つのコマンドにパイプまたは転送したいと思います。

date1="$(date -d $(gawk '/Newest Sequence/ {print $3,$4}') +%s)"
date2="$(date -d $(gawk '/Oldest Sequence/ {print $3,$4}') +%s)" 

ファイルを生成せずにこれを達成できますか?リクエストを頻繁に実行し、結果をソケットに送信し、可能であれば不要なファイルを避けたいと思います。

答え1

必要な基本構文は次のとおりです。

read date1 date2 < <( curl ... | gawk '...' )

これにより、awk次のように1つのインスタンスが必要になります(秒変換を追加せずに以下を参照)。

read date1 date2 < <( curl ... |
    awk '
      /Newest Sequence/ { new=$3" "$4 }
      /Oldest Sequence/ { old=$3" "$4 }
      END { print new, old }
      '
    )

(HTMLファイルの日付順が固定されている場合は、日付情報をすぐに印刷して簡素化できます。)

gawk必要な時間関数もあるため、date基本コードは使用されなくなります。私が示したコードでは、mktime()awkへの呼び出しを追加するか(タイミング機能を避けるために)、次のように変数を変更してgawkシェルレベルで変換を実行する必要があります。date

date1=$(date -d "${date1}" +%s)
date2=$(date -d "${date2}" +%s)

関連情報