行数を数えるbashスクリプト

行数を数えるbashスクリプト

私は行数を数えてから停止するbashスクリプトをLinuxマシンに書き込もうとしています。Firmware state: Rebuildその後、その行番号を取得し(たとえば、行番号0が最初の行なので、15 -1 = 14)、変数に保存しようとします。 。どうすればいいのかわからないので、助けを求めました。

Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Rebuild
Firmware state: Online, Spun Up

修正する

ハードドライブがスロット0に接続されていない場合、正常に動作しない問題が見つかるまで、正常に動作していました。

[root@la43 ~]# /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL | grep -e "Firmware state" -e "Slot"
Slot Number: 4
Firmware state: Rebuild
Slot Number: 5
Firmware state: Online, Spun Up
Slot Number: 6
Firmware state: Online, Spun Up
Slot Number: 7
Firmware state: Online, Spun Up
Slot Number: 8
Firmware state: Online, Spun Up
Slot Number: 9
Firmware state: Online, Spun Up
Slot Number: 10
Firmware state: Online, Spun Up
Slot Number: 11
Firmware state: Online, Spun Up
Slot Number: 12
Firmware state: Online, Spun Up
Slot Number: 13
Firmware state: Online, Spun Up
Slot Number: 14
Firmware state: Online, Spun Up
Slot Number: 15
Firmware state: Online, Spun Up

だから私が必要とするのは、答えからスロット番号4を取得することです。したがって、ファームウェアの状態を取得する必要があります。ライン1を再構築し、-1を使用してライン0を取得し、スロット番号4を取得します。

したがって、varは最終的に4になります。

どうすればいいですか?

ティア

ベストアンサー1

そしてawk

$ var=$(awk '$0=="Firmware state: Rebuild"{print --NR; exit}' file)
$ echo "$var"
14

awk現在の行が同じでFirmware state: Rebuildスクリプトが終了すると、スクリプトは入力レコード番号から1を引いた値を印刷します。次に、$(...)コマンド置換の出力を変数に割り当てますvar

おすすめ記事