Unixコアユーティリティがスクリプトでスペースを認識しないのはなぜですか?

Unixコアユーティリティがスクリプトでスペースを認識しないのはなぜですか?

私はビットコイン価格を引き上げるための短いスクリプトを書いています。この情報はi3blockに渡され、ステータスバーに1時間あたりの価格を表示できます。これが今まで私が持っている情報です。

#!/bin/bash
price=$(curl -s gbp.rate.sx/btc?T | tail -3 | head -1 | grep -o '[0-9]*' | cut -d ' ' -f1)
echo $price

ビットコイン価格をGBPで計算しました。rate.sxTオプション(テキストのみ、ANSIシーケンスなし)を使用してHeadとTailを使用して平均価格行を選択し、数値を決定します。出力は次のとおりです。

26563 26396 1738 8 6 29

最初の数字は平均価格で、他の数字は中央値、バリアントなどです。ご覧のとおり、スペースを区切り文字としてクリッピングを介して渡していますが、出力はクリッピングされません。

また、出力をcsvに変換しようとしてスペースを「、」に置き換えようとしましたが、失敗しました。

price=$(curl -s gbp.rate.sx/btc?T | tail -3 | head -1 | grep -o '[0-9]*' | sed 's/ /,/' )

上記も同様の結果を与える。スペースを識別するのが難しいcutのはなぜですかsed

ベストアンサー1

独自のパイプラインで発生する問題は、出力がgrep複数あるという事実を認識していないことです。ワイヤー長さは1行に1つの整数です。数字は$price引用符なしで使用したため、同じ行にのみ出力されます。


平均価格、つまりラベルの後の金額が必要な場合は、avg:最も簡単な方法は次のとおりですawk

curl -s 'https://gbp.rate.sx/btc?T' |
awk '/^avg:/ { print $2 }'

上記のコードawkは、テキストで始まる各行の2番目のスペースで区切られたフィールドを印刷しますavg:

これはあなたにこのようなことを与えるでしょう£26421。ポンド記号なしで金額が必要な場合は、代わりにprint substr($2,2)使用してくださいprint $2

grepandcutと次のような方法でこれを行いますか?

curl -s 'https://gbp.rate.sx/btc?T' |
grep '^avg:' | cut -d ' ' -f 2

ポンド記号を削除するには、パイプで接続するか、cut -c 2-端にtr -d '£'入れます。

結果を出力するだけで、最初に結果を変数に入れる理由がないことに注意してください。

おすすめ記事