Há muitas postagens do SE sobre a substituição de vários espaços por um único espaço, mas aparentemente nenhuma sobre a substituição de um espaço por vários espaços.
Dados de entrada:
$ head -n20 $X | paste -sd' \n'
full backup: 20250320-203112F repo1: backup set size: 4.4MB, backup size: 4.4MB
full backup: 20250320-210501F repo1: backup set size: 4.4MB, backup size: 4.4MB
full backup: 20250321-070502F repo1: backup set size: 7.7MB, backup size: 7.7MB
incr backup: 20250321-070502F_20250321-100001I repo1: backup set size: 8.5MB, backup size: 2.8MB
incr backup: 20250321-070502F_20250321-104502I repo1: backup set size: 43.5MB, backup size: 38MB
incr backup: 20250321-070502F_20250321-104801I repo1: backup set size: 43.5MB, backup size: 465B
incr backup: 20250321-070502F_20250322-070502I repo1: backup set size: 155.8MB, backup size: 150MB
full backup: 20250323-070501F repo1: backup set size: 283.8MB, backup size: 283.8MB
incr backup: 20250323-070501F_20250324-070501I repo1: backup set size: 411.9MB, backup size: 406.1MB
incr backup: 20250323-070501F_20250325-070502I repo1: backup set size: 541.5MB, backup size: 535.8MB
Codificar oito espaços sed
funciona, mas é difícil dizer rapidamente quantos espaços foram adicionados:
$ head -n20 $X | paste -sd' \n' | sed -e 's/F /F /'
full backup: 20250320-203112F repo1: backup set size: 4.4MB, backup size: 4.4MB
full backup: 20250320-210501F repo1: backup set size: 4.4MB, backup size: 4.4MB
full backup: 20250321-070502F repo1: backup set size: 7.7MB, backup size: 7.7MB
incr backup: 20250321-070502F_20250321-100001I repo1: backup set size: 8.5MB, backup size: 2.8MB
incr backup: 20250321-070502F_20250321-104502I repo1: backup set size: 43.5MB, backup size: 38MB
incr backup: 20250321-070502F_20250321-104801I repo1: backup set size: 43.5MB, backup size: 465B
incr backup: 20250321-070502F_20250322-070502I repo1: backup set size: 155.8MB, backup size: 150MB
full backup: 20250323-070501F repo1: backup set size: 283.8MB, backup size: 283.8MB
incr backup: 20250323-070501F_20250324-070501I repo1: backup set size: 411.9MB, backup size: 406.1MB
incr backup: 20250323-070501F_20250325-070502I repo1: backup set size: 541.5MB, backup size: 535.8MB
Algo assim sed -e 's/F /F \{8,\}/'
é o que estou procurando.
Depois que isso funcionar, eu cuido das incr backup
linhas. Soluções para problemas XY são bem-vindas.
column -t
Já que a solução para o problema XY é bem-vinda... Acho que pode ser esse o caso.
Entendo que você quer que sua saída seja legível e alinhada em
column
, então vamos canalizar tudo paracolumn -t
.Saída do seu exemplo de entrada
Observações: Cada abordagem tem prós e contras.
Você tem duas opções: cortar a string (o que cria problemas se você usar o campo para identificar algo) ou mover o início dos campos seguintes (o que cria problemas se você cortar uma substring de posições que você acha que são fixas e iguais para todas as linhas).
paste
vários arquivos,column -t
você pode ter problemas de alinhamento no caso de linhas com números diferentes de campos das outras linhas, ou arquivos com números diferentes de linhas (também presentes comsed
substituiçõesprintf
).column -t
, se você tiver uma única linha com um campo maior, você amplia a coluna para todas as linhas (mas acredito que esse seja o comportamento desejado, independentemente dos casos patológicos) adicionando muitos caracteres em branco desnecessários.column -t
você deve tratar com cuidado especial campos com espaços dentro e palavras de comprimentos diferentes, mas esse não parece ser seu caso.De
man column
Você pode tentar algo como usar
awk
e formatadoprint
(printf
):Recebo uma saída como:
Claro que você pode ajustar o valor das posições e adicionar o resto dos campos
PS O script final
awk
será algo como:Novamente: você pode ajustar as posições alterando
%NNs
os valores. Exemplo de saída:Deve funcionar com
sed
:Isso substituirá 1 espaço por 8.
Uma linha simples em Perl
Isso usa o modo Perl REPL, com
s///g
o mesmo quesed
, mas ae
opção significa avaliar a parte de substituição como uma expressão." " x 8
duplicará a string 8 vezes e concatenará (.
operador) comF
Uma linha em Python, compreensão de lista e tudo mais...
ou seja