一部のデータを抽出できるように、カール要求の出力を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)