0

を使用して次のことを達成する方法を説明してくださいawk

146GRAID コントローラで最初の 2 台のドライブのミラーを作成する必要があります。空のドライブのリストを表示すると、次の結果が得られます。

Smart Array P420 in Slot 5

unassigned

physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SAS, 146 GB, OK)
physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SAS, 146 GB, OK)
physicaldrive 1I:1:4 (port 1I:box 1:bay 4, SAS, 900.1 GB, OK)
physicaldrive 2I:1:5 (port 2I:box 1:bay 5, SAS, 146 GB, OK)
physicaldrive 2I:1:6 (port 2I:box 1:bay 6, SAS, 146 GB, OK)
physicaldrive 2I:1:8 (port 2I:box 1:bay 8, SAS, 900.1 GB, OK)

この例では、リストをファイルに入れてからfree-drivesコマンドを作成します。次のような出力を取得したい:

drives=1I:1:1,1I:1:2

私の最初の試みは

drives=$(awk '/146 GB/ { printf $2"," ;}; END{print ;}' free-drives)

しかし、それは

1I:1:1,1I:1:2,2I:1:5,2I:1:6,

末尾のコンマを取り除く適切な方法が見つからなかったので、以前sedはそれを取り除いていました [1]。

drives=$(awk '/146 GB/ { printf $2"," ;}; END{print ;}' free-drives|sed -e 's/,$//g')

まだディスクが 4 つあるので、2 つ必要です。そこで、次のように5316572で読んだいくつかのヒントを試しました。

drives=$(awk 'a-->0;/146 GB/{ printf $2"," ;}{a=2}; END{print ;}' free-drives|sed -e 's?,$??g')

しかし、これは完全な混乱を引き起こします。

では、ワンライナーを 1 つだけ使用してこれを行う正しい方法は何awkですか?

[1]: これを修正する方法について何かアドバイスがあれば: それも素晴らしいでしょう ;-)。

4

2 に答える 2