私は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
そのようなオプションはありません。
ベストアンサー1
don_crisstiの答えを見て、Perlテーブルモジュールのさまざまな出力形式と比較しながら、BSD以外のコード列に似た出力を生成するように簡単に拡張できるPerlコードを作成しました。
#!/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