esta é a saída de uma consulta de banco de dados:
1 KALI,REGISTERED
2 KALI,PROCESSING
3 KALI,RECEIVED
1 KALI,SUBMITTED
7 KALI,SUCCEEDED
4 WEKA,PROCESSING
a saída muda toda vez e talvez o número de linhas seja diferente da última vez que a consulta foi executada, mas o formato é sempre assim: number space word,word
. eu preciso que eles sejam assim: number,word,word
. Eu tentei lidar com isso com a própria consulta, mas o banco de dados não suportava isso, então decidi lidar com isso com o Linux. eu usei este comando para substituir espaços por vírgula: sed -e 's/\s\+/,/g' command.output
.eu recebo isso:
,1,KALI,REGISTERED,
,2,KALI,PROCESSING,
,3,KALI,RECEIVED,
,1,KALI,SUBMITTED,
,7,KALI,SUCCEEDED,
,4,WEKA,PROCESSING,
mas eu espero algo assim para que eu possa armazená-lo em uma matriz:
1,KALI,REGISTERED
2,KALI,PROCESSING
3,KALI,RECEIVED
1,KALI,SUBMITTED
7,KALI,SUCCEEDED
4,WEKA,PROCESSING
tentei mais alguns comandos, nenhum deles funcionou. como posso obter essa saída?
Idealmente, você deve alterar a consulta do banco de dados para gerar os dados no formato desejado.
Isso é usado
awk
para reformatar os dados separados por espaço ou tabulação como separados por vírgula. Ao definirOFS
, o separador de campo de saída, para uma vírgula e, em seguida, modificar o valor de um campo em cada registro de entrada,awk
recriará o registro com o novo separador de saída. Imprimi-lo dará a saída desejada.awk
também ignora qualquer espaço em branco à esquerda ou à direita em cada linha ao lê-las, por padrão.Se você quiser fazer isso com
sed
, primeiro remova todos os espaços em branco iniciais e altere o primeiro espaço restante para uma vírgula:O
[[:blank:]]
padrão corresponde a um espaço ou tab (assim como\s
nas expressões regulares do Perl). Estou usando por hábito, mas você pode querer usar um único espaço literal, a menos que esteja realmente lidando com guias (isso não está claro na pergunta). Você também pode escrever as duassed
expressões no mesmo argumento: