A partir da sua (pequena) amostra de smartctl mensagens acima, parece que suas partes são basicamente separadas por "< espaço > < tudo menos uma minúscula >" (exceto pelo campo "# nnn" no início da linha).
sed poderia ajudar a separar as partes:
$ smartctl_output="\
# 1 Short offline Completed without error 00% 7264 -
# 2 Short offline Completed without error 00% 7240 -
# 1 Short offline Completed: read failure 20% 717 555027747"
$ csv="$( sed 's/ //; s/ \([^[:lower:]]\)/,/g' <<< "$smartctl_output" )"
$ echo "$csv"
#1,Short offline,Completed without error,00%,7264,-
#2,Short offline,Completed without error,00%,7240,-
#1,Short offline,Completed: read failure,20%,717,555027747
Se é isso que você quer, agora você pode preencher sua matriz como fez com o HDDinfo.
[atualização]
Aqui está uma explicação sobre a parte sed que faz a divisão: o programa sed é feito de duas partes que eu coloquei em uma linha. Aqui está a versão expandida:
sed '
s/ //
s/ \([^[:lower:]]\)/,/g
'
Um programa sed opera em cada linha de entrada: lê uma linha, aplica um conjunto de transformações e imprime a linha. Então começa de novo com a próxima linha até que não haja mais linhas para ler.
Aqui, o primeiro sed command s/ // exclui o primeiro espaço para unir "#" e o número seguinte.
Em seguida, o segundo sed command s/ \([^[:lower:]]\)/,/g pesquisa o início de cada campo (conforme definido por "< espaço > < tudo, menos um > minúsculo") e substitui o espaço por dois pontos. O refere-se à expressão regular entre parênteses " \([^[:lower:]]\) ", que representa o primeiro caractere do próximo campo.
A parte restante é um teste: em vez de alimentar sed com o conteúdo de um arquivo ou a saída de um comando, eu o alimentei com a variável smartctl_output (uma string feita de suas amostras) e eu atribuí o resultará na variável csv .
[atualização # 2]
Aparece agora que os campos estão separados por dois ou mais espaços. É ainda mais fácil do que anteriormente. O comando sed torna-se:
sed 's/ \+/,/g'
O que significa: substituir todas as séries de dois ou mais espaços por dois pontos.