Bashスクリプトで行の最後の番号を選択する方法

Bashスクリプトで行の最後の番号を選択する方法

smartctl -a コマンドの出力は次のとおりです。

9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 301

次のようにbashスクリプトの変数に(正しい用語の場合)入れました。

$SMARTCTL_OUTPUT=`smartctl -a /dev/sda`

行末の数字だけが変数に返されるように解析したいので、上記の例では301変数に入れます$POWER_ON_HOURS

私はgrepを使ってみました。

$SMARTCTL_OUTPUT=`smartctl -a /dev/sda | grep "Power_On_Hours"`

しかし、これは9 Power_On_Hours 0x0032 100 100 000 Old_age Always -私が興味のない別のテキスト()を返します。

行末の数字だけを返すことはできますか?

答え1

使用するとawk '{print $NF}' 目的が達成されます。$NF最後のフィールドを参照します。アッデータ抽出に使用される言語です。

AWKプログラムは、次のように書かれた一連のパターン作業ペアです。

''条件'' { ''作業'' }

awk '{print $NF}'  

最後のフィールドは常に印刷されます。

答え2

純粋なbashでこれを行うことができます。

POWER_ON_HOURS=${SMARTCTL_OUTPUT##[^0-9]}

数字で終わらない SMARTCTL_OUTPUT から最長のプレフィックスを削除した結果の文字列を返します。

答え3

私はgawkが大好きですが、システムに(g)awkをインストールすることなく、より柔軟なアプローチを使用できます。次のようにコマンドの出力をbash配列に保存します(コマンドの周りにバックティックマークが付いています)。

array=(`smartctl -a /dev/sda`)

その後、インデックス番号で配列内のすべての単語を参照できます(以下の例を参照)。

残念ながら、私のシステムには「smartctl」が識別するデバイスはありません。したがって、「man uptime」コマンドの出力を例の入力として使用しました。

array=(`man uptime`)

配列のすべての要素を表示します。

echo ${array[@]}
UPTIME(1) FreeBSD General Commands Manual UPTIME(1) NAME uptime — show how long system has been running SYNOPSIS uptime DESCRIPTION The uptime utility displays the current time, the length of time the sys‐ tem has been up, the number of users, and the load average of the system over the last 1, 5, and 15 minutes. FILES /boot/kernel/kernel system name list SEE O w(1) HISTORY The uptime command appeared in 3.0BSD. FreeBSD 9.1 April 18, 1994 FreeBSD 9.1

特定の単語の表示:配列要素は0から始まり、計算されます。したがって、7番目の単語は「${array[6]}」になります。

「man uptime」コマンド出力の19番目と17番目の単語(つまり、「DESCRIPTION」と「SYNOPSIS」という単語)を検索するとします。

echo ${array[18]} ${array[16]}
DESCRIPTION SYNOPSIS

「Arpith」と「read」ユーザーの巧妙なアプローチを使用すると、次のように覚えやすい変数に配列要素を保存することもできます。

array2=(`ifconfig`)
read IPETH0 IPLO <<< $(echo ${array2[6]} {array2[46]}
echo $IPETH0 $IPLO
192.168.0.103 127.0.0.1

「この行の最後のフィールド」や文字マスクなどを混乱させないでください。ポジション番号のみを使用してください。

配列インデックスは正の整数です。したがって、シェルスクリプトでさまざまな計算を実行して、特定の単語(範囲、3番目の単語、forループなど)を選択できます。

ファタイ

バニー

関連情報