Text-Formatting

使用 column -t 並替換分隔符

  • October 22, 2017

我使用column命令來漂亮地列印表格,例如

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

它有效,但所有分隔符都替換為空格,例如

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

我需要這樣的東西

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

有任何想法嗎?

我剛剛閱讀了的手冊,column沒有這樣的選項

在查看來自 don_crissti 的答案並將其與 perl 表模組的各種輸出格式進行比較時,我創建了這個可擴展的 perl 程式碼,以便它產生類似於非 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);

當使用另一個答案中提到的 data2 文件執行時,會產生:

$ ./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  

最良好的祝愿……乾杯,drl

引用自:https://unix.stackexchange.com/questions/399038