あなたはこのようなPerl
やpython
としてこれを行うには、他のツールを使用することができます。
Perlでは、たとえば、あなたがこれを使用することができます:
#!/usr/bin/perl -n
use Text::ASCIITable;
next unless /^(\w+)\s*=\s*(.*)$/;
$data{$1} = [] if not $data{$1};
push $data{$1}, $2;
END {
$t = Text::ASCIITable->new();
$t->setCols(keys %data);
for my $i ([email protected]{$data{(keys %data)[0]}} - 1) {
$t->addRow(map $data{$_}[$i], keys %data)
}
print $t;
}
あなたのデータはdata.txt
にすることができますので、書くことができます。
$ ./myscript.pl data.txt
.---------------------------------------------------------------------------------------------------.
| Caption | Size | DriveType | VolumeName | FreeSpace | Description | ProviderName |
+---------+---------------+-----------+------------+--------------+------------------+--------------+
| C: | 146056146944 | 3 | | 41265664000 | Local Fixed Disk | |
| D: | 1073738674176 | 3 | Data | 125067259904 | Local Fixed Disk | |
| E: | | 2 | | | Removable Disk | |
'---------+---------------+-----------+------------+--------------+------------------+--------------'
このスクリプトは、汎用的な列のN数について任意の順序で与えられる。あなたがしたい場合は、Pythonで
#!/usr/bin/perl -n
use Text::ASCIITable;
BEGIN {
@columns = qw/Caption Description DriveType FreeSpace ProviderName Size VolumeName/;
$t = Text::ASCIITable->new();
$t->setCols(@columns);
$re = join "\n", map "$_=(?<$_>.*)", @columns;
undef $/;
}
$t->addRow(map $+{$_}, @columns) while(/$re/g);
END { print $t; }
あるいは:列が同じ順序で知られており、常に表示されている場合は、コードは次のように簡略化することができ
#!/usr/bin/python
import sys
from terminaltables import AsciiTable
table_data = []
for row in ["Caption" + d for d in sys.stdin.read().split("Caption")[1:]]:
table_data.append([column.split('=')[1] for column in row.split("\n")[:-1]])
columns = [column.split('=')[0] for column in row.split("\n")[:-1]]
table_data.insert(0, columns)
print AsciiTable(table_data).table
あなたが必要な理由ここで 'bash'、' sed'または 'awk'を使うのですか?これらの問題は、 'perl'や' python'を使って簡単に解決することができます。 – nowox
'bash'、' sed'、 'awk'は始めたパスです。より良いツール/ソリューションがあれば、私はそのように喜んでいます。 –