「column -t」を使用し、区切り文字を置き換えます。

「column -t」を使用し、区切り文字を置き換えます。

私は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

おすすめ記事