Acabei vendo três possíveis soluções, todas em Perl.
Todos os três usam Text :: CSV como base, para ler no CSV.
Antes de me decidir por um pacote de tabelas preparado, tentei fazer manualmente. Isso foi simples, mas um pouco tedioso. Eu tive que determinar manualmente os comprimentos máximos de campo e desenhar as peças necessárias. Mesmo assim, um script Perl bem espaçado fazendo isso levou 78 linhas.
Em seguida, analisei o pacote Perl Text :: Table, no link . De um olhar muito rápido, isso parecia o que eu precisava. No entanto, descobri que realmente não entendi a documentação e os exemplos não ajudaram. Eu desisti disso.
Eu então descobri o Text :: ASCIITable, no link . Havia exemplos suficientes mostrando o que eu precisava fazer para que fosse fácil construir o script que eu precisava. O único problema que tive foi que o método "draw ()" não parecia funcionar (não fazia nada), embora apenas "print $ table" funcionasse bem. A solução resultante tinha apenas 31 linhas de comprimento.
Este é o script inteiro:
#! /bin/perl
use strict;
use Text::CSV;
use Text::ASCIITable;
my $csv = Text::CSV->new();
my $filename = shift @ARGV;
my $fh;
if (defined $filename) {
open $fh, "<$filename";
}
else {
$fh = *STDIN;
}
my $asciitable = Text::ASCIITable->new();
$asciitable->setOptions('reportErrors', 1);
my $firstRow = $csv->getline($fh);
my @firstRowFields = @$firstRow;
my $numColumns = $#firstRowFields + 1;
$asciitable->setCols(@firstRowFields);
while (my $row = $csv->getline($fh)) {
$asciitable->addRow($row);
}
print $asciitable;
exit(0);