Use 'column -t' e substitua o separador

2

Eu uso o comando column para imprimir uma tabela, por exemplo

column -s ':' -t < /etc/passwd

Funciona, mas todos os separadores são substituídos por espaços, por exemplo

_applepay  *  260  260  applepay Account  /var/db/applepay  /usr/bin/false
_hidd      *  261  261  HID Service User  /var/db/hidd      /usr/bin/false

Eu preciso de algo assim

_applepay | * | 260 | 260 | applepay Account | /var/db/applepay  | /usr/bin/false

Alguma ideia?

Acabei de ler o manual de column e não existe essa opção

    
por daisy 19.10.2017 / 06:28

6 respostas

3

Ao examinar a resposta de don_crissti e compará-la com os vários formatos de saída dos módulos da tabela perl, criei este código perl pronto para expansão para que produzisse uma saída semelhante à coluna de código não-BSD:

#!/usr/bin/env perl

# @(#) p5       Demonstrate framework for non-bsd util-linux:column.

use strict;
use warnings;
use Text::FormatTable;

my ($input_separator)  = ":";
my ($output_separator) = " | ";
my ( $rows, @a, @my_be, $back_end );

# Data rows from colon-separated data, e.g. passwd-format file.
while (<>) {
  chomp;
  @a = split /$input_separator/;
  push @$rows, [@a];
}

# Prepare and print the table.
my $t = Text::FormatTable->new(
  join( $output_separator, ('l') x @{ $rows->[0] } ) );
$t->head( @{ $rows->[0] } );
$t->row( @{ $rows->[$_] } ) for 1 .. @$rows - 1;
print $t->render;

exit(0);

quando executado com o arquivo data2 anotado na outra resposta, produz:

$ ./p5 data2 
login     | password | UID | GID | name        | home             | shell            
daemon    | x        | 1   | 1   | daemon      | /usr/sbin        | /usr/sbin/nologin
bin       | x        | 2   | 2   | bin         | /bin             | /usr/sbin/nologin
_applepay | *        | 260 | 260 | applepay    | /var/db/applepay | /usr/bin/false   
_hidd     | *        | 261 | 261 | HID Service | /var/db/hidd     | /usr/bin/false  

Felicidades ... felicidades, drl

    
por 22.10.2017 / 20:40
3

Se você estiver usando column de util-linux , pode especificar o delimitador de colunas por meio de

   -o, --output-separator string

, por exemplo,

column -s ':' -o ' | ' -t /etc/passwd

imprimirá algo como

root        | x | 0    | 0    | root      | /root           | /bin/zsh
bin         | x | 1    | 1    | bin       | /bin            | /usr/bin/nologin
daemon      | x | 2    | 2    | daemon    | /               | /usr/bin/nologin
mail        | x | 8    | 12   | mail      | /var/spool/mail | /usr/bin/nologin
whatever    | x | 14   | 11   | whatever  | /srv/stuff      | /usr/bin/nologin
    
por 21.10.2017 / 22:51
0

Use sed para substituir o separador.

sed 's/:/ | /g' /etc/passwd
    
por 19.10.2017 / 06:43
0

O comando column não pode fazer a substituição no delimitador, ele terá apenas o delimitador como uma opção para tornar a saída do embelezador. Talvez seja necessário ter um comando sed extra para adicionar | depois.

column -s ':' -t < /etc/passwd| sed -E 's/  ([^ ])/\t|/g'

Apenas mais embelezador (centro).

column -s ':' -t < /etc/passwd| sed -E 's/  ([^ ])/  |  /g'
    
por 19.10.2017 / 07:08
0

Desculpas pelo longo post.

Existem vários módulos perl que executam a formatação da tabela. Aqui está uma comparação de alguns deles. Os dados estão no arquivo data2. O snippet de script é:

# print-like-echo; print-line-with-visual-space.
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }

FILE=${1-data2}

pl " Data file $FILE:"
head $FILE

pl " Results with column:"
column -s ':' -t $FILE

pl " Results from column | sed:"
column -s ':' -t < $FILE | sed -E 's/ ([^ ])/ | /g'

pl " Results of sed | column:"
sed 's/:/ | /g' $FILE | column -s ':' -t

./p4 $FILE

O código perl é de cerca de 30 linhas de perl (e alguns comentários) no arquivo p4. Isso exigirá que alguns módulos sejam instalados:

#!/usr/bin/env perl

# @(#) p4       Demonstrate various table formatters on password file.

use strict;
use warnings;

use Text::Table::Any;

my ( $rows, @a, @my_be, $back_end );

# Data rows from passwd-format file.
while (<>) {
  chomp;
  @a = split /:/;
  push @$rows, [@a];
}

@my_be = ("Text::Table::Tiny");

# push @my_be, 'Text::Table::TinyColor';
# push @my_be, 'Text::Table::TinyColorWide';
# push @my_be, 'Text::Table::TinyWide';
push @my_be, 'Text::Table::Org';
push @my_be, 'Text::Table::CSV';

# push @my_be, 'Text::Table::HTML';
# push @my_be, 'Text::Table::HTML::DataTables';
push @my_be, 'Text::Table::Paragraph';

# push @my_be, 'Text::ANSITable';
push @my_be, 'Text::ASCIITable';
push @my_be, 'Text::FormatTable';

# push @my_be, 'Text::MarkdownTable';
push @my_be, 'Text::Table';
push @my_be, 'Text::TabularDisplay';

# push @my_be, 'Text::TestForError';

foreach $back_end (@my_be) {
  print "\n\n----\n";
  print " Backend table processor = $back_end\n";
  print "\n";
  print Text::Table::Any::table(
    rows       => $rows,
    header_row => 1,
    backend    => $back_end,

  );
}

Os resultados da execução dos dados ./s12 são:

-----
 Data file data2:
login:password:UID:GID:name:home:shell
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
_applepay:*:260:260:applepay:/var/db/applepay:/usr/bin/false
_hidd:*:261:261:HID Service:/var/db/hidd:/usr/bin/false

-----
 Results with column:
login      password  UID  GID  name         home              shell
daemon     x         1    1    daemon       /usr/sbin         /usr/sbin/nologin
bin        x         2    2    bin          /bin              /usr/sbin/nologin
_applepay  *         260  260  applepay     /var/db/applepay  /usr/bin/false
_hidd      *         261  261  HID Service  /var/db/hidd      /usr/bin/false

-----
 Results from column | sed:
login      | password  | UID  | GID  | name         | home              | shell
daemon     | x         | 1    | 1    | daemon       | /usr/sbin         | /usr/sbin/nologin
bin        | x         | 2    | 2    | bin          | /bin              | /usr/sbin/nologin
_applepay  | *         | 260  | 260  | applepay     | /var/db/applepay  | /usr/bin/false
_hidd      | *         | 261  | 261  | HID | Service  | /var/db/hidd      | /usr/bin/false

-----
 Results of sed | column:
login | password | UID | GID | name | home | shell
daemon | x | 1 | 1 | daemon | /usr/sbin | /usr/sbin/nologin
bin | x | 2 | 2 | bin | /bin | /usr/sbin/nologin
_applepay | * | 260 | 260 | applepay | /var/db/applepay | /usr/bin/false
_hidd | * | 261 | 261 | HID Service | /var/db/hidd | /usr/bin/false


----
 Backend table processor = Text::Table::Tiny

+-----------+----------+-----+-----+-------------+------------------+-------------------+
| login     | password | UID | GID | name        | home             | shell             |
+-----------+----------+-----+-----+-------------+------------------+-------------------+
| daemon    | x        | 1   | 1   | daemon      | /usr/sbin        | /usr/sbin/nologin |
| bin       | x        | 2   | 2   | bin         | /bin             | /usr/sbin/nologin |
| _applepay | *        | 260 | 260 | applepay    | /var/db/applepay | /usr/bin/false    |
| _hidd     | *        | 261 | 261 | HID Service | /var/db/hidd     | /usr/bin/false    |
+-----------+----------+-----+-----+-------------+------------------+-------------------+


----
 Backend table processor = Text::Table::Org

| login     | password | UID | GID | name        | home             | shell             |
|-----------+----------+-----+-----+-------------+------------------+-------------------|
| daemon    | x        | 1   | 1   | daemon      | /usr/sbin        | /usr/sbin/nologin |
| bin       | x        | 2   | 2   | bin         | /bin             | /usr/sbin/nologin |
| _applepay | *        | 260 | 260 | applepay    | /var/db/applepay | /usr/bin/false    |
| _hidd     | *        | 261 | 261 | HID Service | /var/db/hidd     | /usr/bin/false    |


----
 Backend table processor = Text::Table::CSV

"login","password","UID","GID","name","home","shell"
"daemon","x","1","1","daemon","/usr/sbin","/usr/sbin/nologin"
"bin","x","2","2","bin","/bin","/usr/sbin/nologin"
"_applepay","*","260","260","applepay","/var/db/applepay","/usr/bin/false"
"_hidd","*","261","261","HID Service","/var/db/hidd","/usr/bin/false"


----
 Backend table processor = Text::Table::Paragraph

login: daemon
password: x
UID: 1
GID: 1
name: daemon
home: /usr/sbin
shell: /usr/sbin/nologin

login: bin
password: x
UID: 2
GID: 2
name: bin
home: /bin
shell: /usr/sbin/nologin

login: _applepay
password: *
UID: 260
GID: 260
name: applepay
home: /var/db/applepay
shell: /usr/bin/false

login: _hidd
password: *
UID: 261
GID: 261
name: HID Service
home: /var/db/hidd
shell: /usr/bin/false



----
 Backend table processor = Text::ASCIITable

.---------------------------------------------------------------------------------------.
| login     | password | UID | GID | name        | home             | shell             |
+-----------+----------+-----+-----+-------------+------------------+-------------------+
| daemon    | x        |   1 |   1 | daemon      | /usr/sbin        | /usr/sbin/nologin |
| bin       | x        |   2 |   2 | bin         | /bin             | /usr/sbin/nologin |
| _applepay | *        | 260 | 260 | applepay    | /var/db/applepay | /usr/bin/false    |
| _hidd     | *        | 261 | 261 | HID Service | /var/db/hidd     | /usr/bin/false    |
'-----------+----------+-----+-----+-------------+------------------+-------------------'


----
 Backend table processor = Text::FormatTable

login    |password|UID|GID|name       |home            |shell            
daemon   |x       |1  |1  |daemon     |/usr/sbin       |/usr/sbin/nologin
bin      |x       |2  |2  |bin        |/bin            |/usr/sbin/nologin
_applepay|*       |260|260|applepay   |/var/db/applepay|/usr/bin/false   
_hidd    |*       |261|261|HID Service|/var/db/hidd    |/usr/bin/false   


----
 Backend table processor = Text::Table

login     password UID GID name        home             shell            
daemon    x          1   1 daemon      /usr/sbin        /usr/sbin/nologin
bin       x          2   2 bin         /bin             /usr/sbin/nologin
_applepay *        260 260 applepay    /var/db/applepay /usr/bin/false   
_hidd     *        261 261 HID Service /var/db/hidd     /usr/bin/false   


----
 Backend table processor = Text::TabularDisplay

+-----------+----------+-----+-----+-------------+------------------+-------------------+
| login     | password | UID | GID | name        | home             | shell             |
+-----------+----------+-----+-----+-------------+------------------+-------------------+
| daemon    | x        | 1   | 1   | daemon      | /usr/sbin        | /usr/sbin/nologin |
| bin       | x        | 2   | 2   | bin         | /bin             | /usr/sbin/nologin |
| _applepay | *        | 260 | 260 | applepay    | /var/db/applepay | /usr/bin/false    |
| _hidd     | *        | 261 | 261 | HID Service | /var/db/hidd     | /usr/bin/false    |
+-----------+----------+-----+-----+-------------+------------------+-------------------+

Uma característica interessante é que os módulos Text :: ASCIITable e Text :: Table justificam os campos de números.

Isso está em um sistema como:

OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution        : Debian 8.9 (jessie) 
bash GNU bash 4.3.30
perl 5.20.2

Felicidades ... felicidades, drl

    
por 21.10.2017 / 15:24
0
awk 'BEGIN{FS=":";OFS=" | "}{$1=$1;print$0}' /etc/passwd
    
por 22.10.2017 / 01:34