Alinhando saída no comando Colar do Linux

1

Como posso fazer com que o segundo arquivo em uma pasta inicie no mesmo ponto, independentemente do comprimento da linha no primeiro arquivo? Por exemplo:

file1:
small
incredibly humungous

file 2:
A
B

Eu quero colar o file1 file2 na saída:

small                        A
incredibly humungous         B

em vez de:

small                        A
incredibly humungous                        B
    
por Meters Mild 07.05.2018 / 07:53

2 respostas

0

Podemos usar o comando column com tab como delimitador.

paste file1 file2 | column -s $'\t' -t

small                 A
incredibly humungous  B
    
por 07.05.2018 / 08:06
0

paste insere caracteres de tabulação entre o conteúdo dos arquivos colados. Podemos usar isso para analisar o resultado em awk e imprimir as colunas com uma formatação personalizada em printf .

Os caracteres de canal na saída abaixo são apenas para decoração.

25 + 5 caracteres justificados à direita:

$ paste file1 file2 | awk -F '\t' '{ printf("|%25s|%5s|\n", $1, $2) }'
|                    small|    A|
|     incredibly humungous|    B|

25 + 5 caracteres justificados à esquerda:

$ paste file1 file2 | awk -F '\t' '{ printf("|%-25s|%-5s|\n", $1, $2) }'
|small                    |A    |
|incredibly humungous     |B    |

Primeira coluna muito curta, 5 + 5 caracteres justificados à esquerda:

$ paste file1 file2 | awk -F '\t' '{ printf("|%-5s|%-5s|\n", $1, $2) }'
|small|A    |
|incredibly humungous|B    |

Primeira coluna muito curta com truncamento de dados, caracteres 5 + 5 justificados à esquerda:

$ paste file1 file2 | awk -F '\t' '{ printf("|%-5.5s|%-5s|\n", $1, $2) }'
|small|A    |
|incre|B    |

Descobrir a linha mais longa em file1 e file2 e usar isso como a largura do campo na chamada printf() :

$ paste file1 file2 | awk -F '\t' -v len=$( awk -F '\t' 'length > m { m = length } END { print m }' file1 file2 ) '{ printf("|%*s|%*s|\n", len, $1, len, $2 ) }'
|               small|                   A|
|incredibly humungous|                   B|

Mesma coisa, mas para as duas colunas separadamente:

$ longest_line() { awk -F '\t' 'length > m { m = length } END { print m }' "$1"; }
$ paste file1 file2 | awk -F '\t' -v len1=$( longest_line file1 ) -v len2=$( longest_line file2 ) '{ printf("|%*s|%*s|\n", len1, $1, len2, $2 ) }'
|               small|A|
|incredibly humungous|B|
    
por 07.05.2018 / 08:36