Reconsiderar o espaçamento das colunas

1

Eu tenho um arquivo com o seguinte formato

1      1      1 0.02484183   57.2400000   24.6000000  
2      1      2 -0.16091000   56.5200000   24.5600000 
3      1      1 0.02484183   55.5700000   24.4900000  
4      1      1 0.02484183   56.4400000   25.5100000  
5      1      2 0.08638400   56.8900000   23.3300000  
6      1      1 0.01376475   57.8900000   23.5200000  
7      1      1 0.01376475   57.0600000   22.5200000  
8      1      2 0.17612200   55.8800000   22.9700000  
9      1      1 0.02042900   56.1600000   22.0400000  
10      1      2 -0.34768900   55.9300000   24.0700000
11      1      1 0.07439383   55.5100000   25.0200000 
12      1      1 0.07439383   55.4600000   23.7100000 
13      1      1 0.07439383   57.0000000   24.2400000 
14      1      2 0.02151800   54.4400000   22.8700000 
15      1      1 0.08793975   54.5000000   22.4000000 

Eu quero, em vez disso, produzir um arquivo com o formato abaixo

 1      1      1  0.02484183   57.2400000   24.6000000  
 2      1      2 -0.16091000   56.5200000   24.5600000 
 3      1      1  0.02484183   55.5700000   24.4900000  
 4      1      1  0.02484183   56.4400000   25.5100000  
 5      1      2  0.08638400   56.8900000   23.3300000  
 6      1      1  0.01376475   57.8900000   23.5200000  
 7      1      1  0.01376475   57.0600000   22.5200000  
 8      1      2  0.17612200   55.8800000   22.9700000  
 9      1      1  0.02042900   56.1600000   22.0400000  
10      1      2 -0.34768900   55.9300000   24.0700000
11      1      1  0.07439383   55.5100000   25.0200000 
12      1      1  0.07439383   55.4600000   23.7100000 
13      1      1  0.07439383   57.0000000   24.2400000 
14      1      2  0.02151800   54.4400000   22.8700000 
15      1      1  0.08793975   54.5000000   22.4000000 
    
por Dimitris Mintis 11.08.2018 / 18:49

2 respostas

3

awk usando printf +% f

Tente isso. Usando printf com uma largura modificada (por exemplo, %2d , o campo é preenchido conforme necessário). Da mesma forma, % 2.8f formata um número de ponto flutuante aqui.

$ awk '{printf "%2d%7d%7d % 2.8f  % 2.7f  % 2.7f\n",$1,$2,$3,$4,$5,$6}' file
 1      1      1  0.02484183   57.2400000   24.6000000
 2      1      2 -0.16091000   56.5200000   24.5600000
 3      1      1  0.02484183   55.5700000   24.4900000
 4      1      1  0.02484183   56.4400000   25.5100000
 5      1      2  0.08638400   56.8900000   23.3300000
 6      1      1  0.01376475   57.8900000   23.5200000
 7      1      1  0.01376475   57.0600000   22.5200000
 8      1      2  0.17612200   55.8800000   22.9700000
 9      1      1  0.02042900   56.1600000   22.0400000
10      1      2 -0.34768900   55.9300000   24.0700000
11      1      1  0.07439383   55.5100000   25.0200000
12      1      1  0.07439383   55.4600000   23.7100000
13      1      1  0.07439383   57.0000000   24.2400000
14      1      2  0.02151800   54.4400000   22.8700000
15      1      1  0.08793975   54.5000000   22.4000000
$

Experimente on-line !

awk usando printf + guias

A abordagem de tabulação (\ t) também sugerida torna o código muito mais limpo, mas não atinge o alinhamento como você pede.

$ awk '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6}' file
1       1       1       0.02484183      57.2400000      24.6000000
2       1       2       -0.16091000     56.5200000      24.5600000
3       1       1       0.02484183      55.5700000      24.4900000
4       1       1       0.02484183      56.4400000      25.5100000
5       1       2       0.08638400      56.8900000      23.3300000
6       1       1       0.01376475      57.8900000      23.5200000
7       1       1       0.01376475      57.0600000      22.5200000
8       1       2       0.17612200      55.8800000      22.9700000
9       1       1       0.02042900      56.1600000      22.0400000
10      1       2       -0.34768900     55.9300000      24.0700000

Versão sem código, coluna

Mais uma vez, não é exatamente a saída que você solicita, mas simples de usar usando column .

$ column -t file
1   1  1  0.02484183   57.2400000  24.6000000
2   1  2  -0.16091000  56.5200000  24.5600000
3   1  1  0.02484183   55.5700000  24.4900000
4   1  1  0.02484183   56.4400000  25.5100000
5   1  2  0.08638400   56.8900000  23.3300000
6   1  1  0.01376475   57.8900000  23.5200000
7   1  1  0.01376475   57.0600000  22.5200000
8   1  2  0.17612200   55.8800000  22.9700000
9   1  1  0.02042900   56.1600000  22.0400000
10  1  2  -0.34768900  55.9300000  24.0700000
11  1  1  0.07439383   55.5100000  25.0200000
12  1  1  0.07439383   55.4600000  23.7100000
13  1  1  0.07439383   57.0000000  24.2400000
14  1  2  0.02151800   54.4400000  22.8700000
15  1  1  0.08793975   54.5000000  22.4000000
$
    
por 11.08.2018 / 19:28
1

Leia o arquivo com awk e imprima os valores com printf .

awk '{ printf ("%2d\t%s\t%s\t%11s\t%s\t%s\n", $1, $2, $3, $4, $5, $6); }' file

Adapte a string de formato printf conforme necessário.

    
por 11.08.2018 / 18:58