나는 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
답변2
column
from을 사용하면 util-linux
다음과 같이 열 구분 기호를 지정할 수 있습니다.
-o, --output-separator string
예를 들어
column -s ':' -o ' | ' -t /etc/passwd
다음과 같은 것을 인쇄합니다
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
답변3
sed
분리기 교체용 입니다 .
sed 's/:/ | /g' /etc/passwd
답변4
너무 긴 게시물에 대해 사과드립니다.
테이블 형식화를 수행할 수 있는 Perl 모듈은 많이 있습니다. 다음은 그 중 일부를 비교한 것입니다. 데이터는 data2 파일에 있습니다. 스크립트 조각은 다음과 같습니다
# 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/ ([^ ])/ | \1/g'
pl " Results of sed | column:"
sed 's/:/ | /g' $FILE | column -s ':' -t
./p4 $FILE
Perl 코드는 p4 파일에 있는 Perl의 약 30줄(및 일부 주석)입니다. 일부 모듈을 설치해야 합니다.
#!/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,
);
}
./s1 data2 실행 결과는 다음과 같습니다.
-----
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 |
+-----------+----------+-----+-----+-------------+------------------+-------------------+
흥미로운 기능은 Text::ASCIITable 및 Text::Table 모듈이 숫자 필드를 오른쪽 정렬한다는 것입니다.
이것은 다음과 같은 시스템에 있습니다.
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
행운을 빕니다... 건배, drl