Зависит от того, насколько точно вам нужно форматирование - обычно достаточно разделения табуляцией - но я бы сделал так:
#!/usr/bin/env perl
use strict;
use warnings;
#set record separator to double line feed.
local $/ = "\n\n";
#print header row
print join "\t", "VM", "Virtual_Disk", "size", "Physical Disks", "\n";
#iterate stdin or files specified on command line
while ( <> ) {
#capture data from this 'chunk':
my ( $vm ) = /Virtual Machine\s+(\w+)/;
my ( $status ) = /status\s*(\w+)/;
my @physical_disks = m/Physical Disk\s+(.*)/g;
my %virtual_disks = m/Virtual Disk\s+(\w+).*size\s+(\w+)/g;
#output tab separated
print join ("\t", $vm, $_, $virtual_disks{$_}, "-" ), "\n" for keys %virtual_disks;
print join ("\t", $vm, "-", "-", $_ ), "\n" for @physical_disks;
}
Это выравнивание по табуляторам, а не фиксированная ширина как таковая. Это может быть более подходящим, в зависимости от вашего случая использования. В противном случае вы можете использовать format
, как описано выше, или sprintf
для фиксации ширины поля:
#!/usr/bin/env perl
use strict;
use warnings;
local $/ = "\n\n";
my $field_format = "%8s"; #string, 8 chars wide
print join "\t", map { sprintf $field_format, $_ } "VM", "Virtual_Disk", "size", "Physical Disks", "\n";
while ( <> ) {
my ( $vm ) = /Virtual Machine\s+(\w+)/;
my ( $status ) = /status\s*(\w+)/;
my @physical_disks = m/Physical Disk\s+(.*)/g;
my %virtual_disks = m/Virtual Disk\s+(\w+).*size\s+(\w+)/g;
print join "\t", map { sprintf $field_format, $_} ( $vm, $_, $virtual_disks{$_}, "-" ), "\n" for keys %virtual_disks;
print join "\t", map { sprintf $field_format, $_} ( $vm, "-", "-", $_ ), "\n" for @physical_disks;
}
Кажется, я нашел решение этой проблемы. Перепробовав множество различных исправлений, и ни одно из них не сработало, я запустил sudo chown -R akaash:akaash ~/Git/atom
, затем script/build --create-debian-package --compress-artifacts --install --unsafe-perm=true --allow-root --global leveldown
.
Я считаю, что команда chown
избавила от необходимости использовать sudo
.
Где-то по пути я нашел этот сайт:
https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally
, что привело меня к:
https://github.com/creationix/nvm
, в котором объяснялось, как обновить npm с помощью менеджера версий узла, а не установщика узла.
Это могло помочь, а могло и не помочь, хотя я знаю, что это действительно обновило npm. Но каким-то образом комбинация всего, что я пробовал, в конце концов избавила от ошибки.