Com
awk '{ printf "%-15s %s\n", $1, $2 }' renamed | sort -V
... Obtenho uma boa saída do arquivo renamed
.
Parece que:
file1 file1.new
Mas eu quero que a saída seja alterada para isto:
file1 --> file1.new
Quero adicionar -->
na posição 15 em cada linha.
Como fazer isso?
A
printf
string de formato%-15s %s\n
especifica que você deseja gerar duas strings delimitadas por um espaço e terminadas por um caractere de nova linha.A primeira string deve ter uma largura de 15 caracteres, e o sinal de menos significa que ela deve ser justificada à esquerda dentro desses 15 caracteres (os caracteres restantes à direita da string serão preenchidos com espaços).
Para inserir
-->
antes da segunda string, após o espaço simples, basta modificar o formato para%-15s --> %s\n
.Exemplo disto:
Note que o
-->
é realmente adicionado na posição 17, não 15. A posição 15 é reservada para a primeira string, enquanto a posição 16 terá esse caractere de espaço na string de formatação. Para adicionar-->
na posição 15, você precisaria reduzir o espaço da primeira string para 13:%-13s --> %s\n
.Considere usar
column
para determinar a largura apropriada do primeiro campo em vez de codificação fixa15
para que ele possa manipular campos maiores que 15 caracteres, se necessário, por exemplo, usando qualquer versão decolumn
:Se você tiver o GNU
column
, ele terá uma-o
opção para especificar o separador de campo de saída, então você não precisará do pipe parased
:Ele também pode lidar com espaços em branco dentro dos campos se seus campos forem separados por tabulações, adicionando
-s$'\t'
ou se houver todo tipo de outras coisas que podemos fazer para lidar com todos os tipos de entradas diferentes. Faça uma nova pergunta com mais detalhes sobre seu formato de entrada se precisar de mais ajuda.