Podemos usar o comando column
com tab
como delimitador.
paste file1 file2 | column -s $'\t' -t
small A
incredibly humungous B
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
Podemos usar o comando column
com tab
como delimitador.
paste file1 file2 | column -s $'\t' -t
small A
incredibly humungous B
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|