2

smartctlコマンドから特定のデータを取得しようとしています。合計power_on_hoursを取得したいのですが、すべてのフィラーが必要ではありません。まっすぐな時間が欲しいだけです。これは私が今思いついたコマンドです:

smartctl -A /dev/sda | grep Power_On_Hours

私の出力は次のようになります。

9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       27

行の最後の番号が欲しいです。おそらく、ファイルの最後まで読み取って最初のスペースまでカウントバックするか、ハイフンまで検索してファイルの最後まで読み取ることができると思います。どうすればいいのかわからない。grepに関する私の経験は、これにアプローチする方法を知るには低すぎます。私の目標は、出力を次のようにすることです。

27

どんな助けでも大歓迎です。

4

4 に答える 4

3

使用できる/使用したい場合awkは、 で最後のフィールドを簡単に取得できawk '{print $NF}'ます。たとえば、すでに持っているものに基づいて構築します。

smartctl -A /dev/sda | grep Power_On_Hours | awk '{print $NF}'

NFフィールド数の awk 組み込み変数です。$NFそのフィールドの内容を使用する手段を使用する。

ただし、文字列を検索grepするだけで、これを短縮 (および削除) できます。awk

 smartctl -A /dev/sda | awk '/Power_On_Hours/ {print $NF}'
于 2012-08-14T19:15:38.830 に答える
1

使用できます

2 つgrepのパイプ

smartctl -A /dev/sda | grep Power_On_Hours | grep -o '[0-9]+$'

2 番目grepは、一致する部分のみを出力します。grep場合によっては、探しているものを分離するために3 つ以上の が必要になることがあります。私はこれを迅速で汚い仕事に使用します。

于 2012-08-14T19:17:56.777 に答える
0

awkこれには明らかに適切なツールですが、次のこともできます。

smartctl -A /dev/sda | grep Power_On_Hours | tr -s \  \\t | cut -f 10

(円記号の間に2つのスペースがあることに注意してください。そうしないと、お好みになりますtr -s ' ' '\t')テキストから特定の列を選択するための最も一般的な2つのツールはとです。両方に精通している必要があります cut。は、よりも空白について気難しいです。上記のパイプラインのの目的は、の空白をクリーンアップすることです。 最後の列をとして参照できるという点で優れていますが、カウントする必要があります。awkcutawktrcutawk$NFcut

于 2012-08-14T21:39:08.093 に答える