を使用して次のことを達成する方法を説明してくださいawk
。
146G
RAID コントローラで最初の 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]: これを修正する方法について何かアドバイスがあれば: それも素晴らしいでしょう ;-)。