Eu tenho um script, digamos que é esse (obviamente, o meu real é bem mais complicado):
echo A
echo a
echo B
echo b
echo C
echo c
echo D
echo d
Existe uma maneira fácil de colocar as linhas lado a lado?
A a
B b
C c
D d
Ou seria melhor se eu separasse em 2 arquivos e depois os mesclasse? Como eu faria isso?
Uma ferramenta portátil para isso é
paste
:Da especificação :
Linhas de comprimentos variados podem gerar resultados que não estão perfeitamente alinhados. Para ver um exemplo, execute:
Você pode corrigir isso canalizando para
column
:Notas:
$'\t'
gera um caractere de tabulação em alguns shells , portávelmente você pode fazer isso com"$(printf '\t')"
.column
em si não é portátil.column
precisa saber toda a sua entrada antes de imprimir qualquer saída, portanto não é uma boa ferramenta para processar algo que você precisa ver imediatamente; e é a ferramenta errada para processar dados que podem nunca terminar (por exemplo, de um loop potencialmente infinito).Você pode usar
fmt
para formatar a saída:Uma abordagem é evitar imprimir a nova linha, exceto o último campo de cada linha. (Especialmente se você tiver linhas com diferentes números de campos.)
Algumas plataformas podem fazer isso no
echo
comando (por exemplo, adicionando um sinalizador de opção ou uma sequência especial na string), mas acho que a maneira mais simples e portátil é usar oprintf
comando. Por exemplo:É claro que você poderia usar uma tabulação ou outro separador em vez de 4 espaços.
Em casos mais complexos (por exemplo, se o texto puder incluir caracteres como
%
), então você precisará usar uma string de formato explícita, por exemploprintf "%s " "A"
.Isso também permitiria alinhar campos de comprimento variável, se desejado. Por exemplo:
dá a saída:
(Você pode usar a justificação à direita removendo o
-
;printf
também tem muitas outras opções de formatação.)Vamos supor aqui que sua sequência de comandos echo seja apenas uma ilustração que produz linhas de texto que na vida real vêm de, digamos, um aplicativo; então simplesmente dizer
echo -n
todas as outras vezes ou substituirecho
porprintf
não funcionaria.Depois, há esta solução básica com a função
produce_output()
de substituto para seu programa de produção de resultados:Claro que você pode usar o
printf
comando em vez deecho
para obter mais controle do formato de saída.