1

マシンのリストに SSH 接続して、すべてのシステム情報 (モデル、ハードウェア アドレスなど) を取得しています。

返された情報はきちんと整理されていて、awk を使用して必要な情報を簡単に取得できます。ただし、機能しないのは、特定の行を選択する FNR です。

entry=$(tssh -n 10 $host 'smbios-sys-info')
echo "$entry" | awk 'FNR == 2 {print $3 $4}'

FNR を削除すると、awk '{print $3 $4}' だけでも問題なく動作しますが、必要な 1 行ではなく、すべての行のフィールド 3 と 4 が得られます。

シェルのスクリプトの外でこれを行うと、これは機能します:

smbios-sys-info | awk 'FNR == 2 {print $3 $4}'

「$entry」はsmbios-sys-infoの形式を保持しますが、echo「$entry」(引用符で囲まれた変数)の使用に関して、特定の行を選択するawkの機能に何らかの影響を与える潜在的な影響があると思います。

参考までに、コマンド smbios-sys-info の出力は次のとおりです。

[root@host ~]# smbios-sys-info
Libsmbios version:      2.2.26
Product Name:           OptiPlex 760
Vendor:                 Dell Inc.
BIOS Version:           A02
System ID:              123456
Service Tag:            ABCDEFG
Express Service Code:   11111111111
Asset Tag:              N/A
Property Ownership Tag: N/A

EDIT 別の方法として、おそらく ssh コマンドで awk を使用して、すべてのフィールドではなく 1 つのフィールドを取得できることを認識しています。しかし、システム情報で複数のことを行う必要があるため、それは私の状況には適していません。そのため、すべてを一度に取得してローカルで作業する方が簡単です.

4

1 に答える 1

2

FNR 現在の入力ファイルの入力レコード番号。

NR これまでに確認された入力レコードの総数。

ここで、私の awk (Gnu awk 4.1.0) では、NR と FNR の両方が機能しました。ただし、入力としてファイルがない場合は、NR を使用することをお勧めします。

@rici 問題は、本当に古いawkがFNRを特別な変数として実装していないことです。NRのみ。

于 2013-07-05T15:12:21.670 に答える