Formatar largura da coluna com Printf

1

Eu estou tentando mesclar três arquivos usando 'colar' e 'awk'. No entanto, as colunas não estão se ajustando à sequência de caracteres mais longa. Todos os arquivos são formatados da mesma maneira como abaixo.

  • F gge0001x
  • D 12-30-2006
  • T 14:15:20
  • S a69
  • B 15.8
  • M gge06001
  • P 30.1

Abaixo está o meu código defeituoso.

$ paste <(awk '{print $1}' lineid) <
(awk '{printf("%-13.10s\n", $1)}' gge0001x) <
(awk '{printf("%-13.10s\n", $1)}' gge0001y) <
(awk '{printf("%-13.10s\n", $1)}' gge0001z)

Este código resulta em colunas desalinhadas conforme ilustrado abaixo.

Arquivodeentrada1

FDTSBMPQRUXAGHOCKWL

Arquivodeentrada2

gge0006x12-30-200614:05:23a6915.4gge0600130.819.21006.21012.736.238.994107.718.41137.0847.53728.198212.5268.1

Arquivodeentrada3

gge0006y12-30-200614:05:55a6915.3gge0600130.621.11006.61014.636.138.994107.718.43336.7057.62127.623210.5168

Arquivodeentrada4

gge0006z12-30-200614:06:28a6915.7gge0600130.323.510081014.136.638.994107.718.43436.5087.54627.574208.0867.6

Resultadosparapastefile1file2file3file4|column-t

    
por M.Rubie 21.04.2015 / 17:51

2 respostas

2

Seus arquivos de entrada têm DOS \r\n finais de linha. Remova os retornos de carro com o comando dos2unix ou com sed -i 's/\r$//'

    
por 21.04.2015 / 19:19
0

O comando paste separa entradas com tabulações, que são então interpretadas como um número variável de espaços na exibição. Se sua entrada já estiver preenchida com espaço em branco, você pode tentar excluir as guias da saída de paste , com | tr -d '\t' ou transformar cada guia em um único espaço, com | tr '\t' ' ' (no meu sistema, o primeiro pode ser alcançado usando paste -d '' , mas não sei se isso é portável, e o segundo pode ser alcançado com paste -d ' ' ; dizendo paste para usar espaços como delimitadores).

    
por 21.04.2015 / 18:00