Eu tenho algumas saídas que se parecem com o seguinte:
Gathering data for drive 1 ...
Drive name: id1,sd@n5000cca17096
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp: 41 C
Gathering data for drive 2 ...
Drive name: id1,sd@n5000cca24156
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp: 41 C
Gathering data for drive 3 ...
Drive name: id1,sd@n5000cca8749
Drive Model: HUH721010AL4204
failed to get drive stats
Gathering data for drive 4 ...
Drive name: id1,sd@n5000cca19183
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp: 41 C
Gathering data for drive 5 ...
Drive name: id1,sd@n5000cca4607
Drive Model: HUSMH8010BSS204
failed to get drive stats
Gathering data for drive 6 ...
Drive name: id1,sd@n5000cca10152
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp: 41 C
Eu gostaria de imprimir o "Nome da unidade" para qualquer unidade na qual as estatísticas da unidade não possam ser retornadas (assim correspondendo em failed to get drive stats
).
Eu sei como obter a linha anterior com:
awk '$0=="failed to get drive stats" && $2>1 {print f} {f=$0}'
Mas isso não me ajuda.
Saída desejada:
Drive name: id1,sd@n5000cca8749
Drive name: id1,sd@n5000cca4607
Editar:
Por algum motivo, quando a saída é redirecionada, ela não aparece da mesma maneira que no terminal. Se eu executar:
command >out.txt 2>&1
O arquivo de saída será semelhante a:
failed to get drive stats
failed to get drive stats
Gathering data for drive 1 ...
Drive name: id1,sd@n5000cca17096
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp: 41 C
Gathering data for drive 2 ...
Drive name: id1,sd@n5000cca24156
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp: 41 C
....
Ambas as respostas awk forneceram trabalho, mas acho que tenho outros problemas
Isso primeiro define o separador de campo de entrada como um
:
. Em seguida, ele salva a linha na variávelsaved
sempre que uma linha especificando um nome de unidade é encontrada.Se uma linha diz
failed to get drive stats
, o valor atual desaved
é impresso.É por isso que o awk tem um "modo parágrafo", tudo que você precisa é:
Tentei com o método abaixo e funcionou bem
resultado