Hallo Nobodywolf,
ich habe die Zeile mal etwas lesbarer in folgendem Block dargestellt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | megacli -PDlist -aALL -NoLog |
egrep 'Slot|state|Error Count|flagged' |
awk '
/Slot/ {
if (x) print x;
x="";
}
{
x=(!x)?$0:x " | " $0;
} END {
print x;
}' |
sed 's/ Number//g' |
sed 's/ Count//g' |
sed 's/Firmware state: //g' |
sed 's/Drive has flagged a S.M.A.R.T/SMART/g' |
column -t
|
In Zeile 1 wir das Programm "megacli" aufgerufen, dessen Ausgabe in Zeile 2 durch "egrep" nach verschiedenen Strings (Slot oder stat oder ...) durchsucht wird. die so gefundenen Zeilen werden ausgegeben und durch das Programm "awk" in Zeile 3 bis 12 weiter verarbeitet.
Eventuell hast du nicht alles in der Zeile veröffentlicht, da die Variable "x" (in Zeile 5ff) nicht beschrieben istbzw später global mit einem boolschen Wert belegt wird. Da ich die Ausgabe der Programms nicht kenne, kann hier nur vermutet werden.
In Zeile 4 bis 7 wird beschrieben, was passieren soll, wenn in der Zeile der String "SLot" auftaucht. Wenn "x" wahr ist (Zeile 5), wird x ausgegeben. Danach wird x auf "leer" gesetzt (Zeile 6). Das ist logische "False".
Zeile 8 bis 10 beschreibt, was mit jeder Zeile an "awk" gemacht wird. In Zeile 9 wird überprüft, ob "x" nicht wahr ist (!x). Ist das der Fall, wird der Variablen x die eingelesenen Zeile ($0) zugewiesen. Wenn nicht wird bei der Zuweisung vor die eingelesene Zeile ($0) der Wert der Variablen "x" plus die Zeichenkette " | " vor gehängt. Diesen Trick wendet man an, wenn man mehrere Spalten ein eine Zeile Packen will, die durch " | " getrennt sind, damit sie später mit column hübsch ausgegeben werden können.
Wenn alle Zeilen von "awk" verarbeitet wurden, wird der "END" Block (Zeile 11 bis 12) durchgeführt. Hierbei wird nur der Wert von "x" (Zeile 11) ausgegeben. Das bedeutet, die aus dem "egrep" gelieferten Zeilen werden als Spalten in einer Zeile aufbereitet ausgegeben.
In den Zeilen 13 bis 15 löscht man auf umständliche Weise alle (g) Strings " Number, Count,Firmware stat: ". In Zeile 16 werden alle (g) Strings "Drive has flagged a S.M.A.R.T" durch "SMART" ersetzt.
Am Ende (Zeile 17) erhält man die ausgegebenen Daten als Tabelle dargestellt.