这似乎是一项简单的任务,但使用 duckduckgo 我无法找到一种方法来正确地完成我正在尝试的事情。
主要问题是:如何使用定界符将 linux 或 bash 中命令的输出拆分为多列?
我有一个看起来像这样的文件:(这只是一个简化的例子)
-----------------------------------
Some data
that varies in line length
-----------------------------------
-----------------------------------
More data that is seperated
by a new line and dashes
-----------------------------------
等等。每次将数据写入文件时,它都包含在一行破折号中,由最后一个 block 的空行分隔。数据的行长各不相同。我想要的基本上是一种使用 bash 将文件分成多列的工具或方法,如下所示:
----------------------------------- -----------------------------------
Some data More data that is seperated
that varies in line length by a new line and dashes
----------------------------------- -----------------------------------
每列应占屏幕的 50%,无需居中(如对齐)。文件必须 按 block 拆分。在中间分割文件或类似的东西是行不通的。我基本上希望第 1 block 转到左列,第 2 block 向右,第 3 block 再次向左,4 向右,依此类推。该文件不断更新,更新应立即写入屏幕。 (目前我正在使用 tail -f
)
因为这听起来像是一个相当普遍的问题,所以我欢迎采用一般方法来解决这个问题,而不是只对我的情况有效的特定答案,这样来自搜索引擎的人们正在寻找一种在 bash 中使用两列布局的方法得到一些信息太。我尝试了 column
和 pr
,两者都没有按预期工作。 (我在评论中对此进行了详细说明)
编辑:明确地说,我正在寻找一个一般的方法。遍历一个文件,获取定界符之间的数据,将其放入 A 列,获取下一个数据并将其放入 B 列,依此类推。
最佳答案
这个问题被标记为 Perl,所以这是一个可能的 Perl 答案:
#!/usr/bin/env perl
use strict;
use warnings;
my $is_col1 = 1;
my $in_block = 0;
my @col1;
while (<DATA>) {
chomp;
if (/^\s*-+\s*$/ ... /^\s*-+\s*$/) {
$in_block = 1;
if ($is_col1) {
push @col1, $_;
}
else {
printf "%-40s%-40s\n", shift @col1 // '', $_;
}
}
else {
if ($in_block) {
$in_block = ! $in_block;
$is_col1 = ! $is_col1;
print "\n" if $is_col1; # line separating blocks
}
}
}
print join("\n", @col1), "\n\n" if @col1;
__DATA__
-----------------------------------
Some data
that varies in line length
-----------------------------------
-----------------------------------
More data that is seperated
by a new line and dashes
with a longer column2
-----------------------------------
-----------------------------------
The odd last column
-----------------------------------
输出:
----------------------------------- -----------------------------------
Some data More data that is seperated
that varies in line length by a new line and dashes
----------------------------------- with a longer column2
-----------------------------------
-----------------------------------
The odd last column
-----------------------------------
关于linux - 根据分隔符在多列中打印文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49620687/