Prezados Estou recorrendo aos senhores pois estou experimentando uma certa dificuldade para para tratar uma lista de comandos:
A lista é assim: ID COMANDO_AZUL ID COMANDO_ABOBORA ID COMANDO3_ VERDE Eu preciso que ela fique assim: COMANDO_AZUL VALOR: COMANDO_ABOBORA VALOR: COMANDO3_ VERDE VALOR: O total de caracteres desde o começo da linha até o inicio da palavra "VALOR" deve ser obrigatoriamente de 30 caracteres. Então eu fiz: #!/bin/bash espacos="(30 espaços)" while read linha do vetor ( $linha ) echo "${vetor[1]}$(echo $espacos | cut c-$(expr 30 - ${#vetor[1]}))VALOR" >> nova_lista done < lista E o resultado foi: COMANDO_AZULVALOR COMANDO_ABOBORAVALOR COMANDO3_ VERDEVALOR Então eu mudei para: #!/bin/bash espacos="------------------------------" while read linha do vetor ( $linha ) echo "${vetor[1]}$(echo $espacos | cut c-$(expr 30 - ${#vetor[1]}))VALOR" | tr " " >> nova_lista done < lista E o resultado foi: COMANDO_AZUL VALOR COMANDO_ABOBORA VALOR COMANDO3_ VERDE VALOR Achei que fosse algum erro na lógica até que eu manualmente acrescentei um espaço no final de alguns comandos da lista original e então ficou assim: COMANDO_AZUL VALOR <--- está certo COMANDO_ABOBORA VALOR <--- está certo COMANDO3_ VERDE VALOR <--- está errado! Para me deixar fora de órbita, se eu criar uma lista num editor de textos com poucos comandos, tudo funciona. Se eu pegar lista original e acrescentar manualmente um espaço no final de cada comando, tudo funciona. Se eu pegar a lista original e aplicar o script dá a zebra! Acredito que o problema esteja sendo causado pelo caracter "newline" no final de cada comando... mas porque isso nao acontece em uma lista que eu crio com o editor de textos? Adicionar manualmente o espaço em branco nas listas não e uma opção pois além de ser uma blasfêmia, cada lista pode ter mais de 50000 linhas. Desde já agradeço qualquer dica.