$ cat lipsum.txt
Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
Cras hendrerit scelerisque sollicitudin.
In at mauris cursus,
varius eros ut,
dignissim urna.
Nullam est orci,
molestie sit amet risus in,
commodo dignissim justo.
Morbi eu enim leo.
Proin pulvinar consectetur elit,
in viverra nisl ultrices quis.
Vivamus ac lacus eget urna auctor finibus.
Suspendisse potenti.
Vestibulum sed ligula nisl.
可接受的解决方案将产生如下结果:
$ cat lipsum.txt | pr -2 -t -s
Lorem ipsum dolor sit amet, commodo dignissim justo.
consectetur adipiscing elit. Morbi eu enim leo.
Cras hendrerit scelerisque sollicitudin. Proin pulvinar consectetur elit,
In at mauris cursus, in viverra nisl ultrices quis.
varius eros ut, Vivamus ac lacus eget urna auctor finibus.
dignissim urna. Suspendisse potenti.
Nullam est orci, Vestibulum sed ligula nisl.
molestie sit amet risus in,
$ cat lipsum.txt |awk 'BEGIN{w=0;}{lines[NR]=$0;l=length($0);w=l>w?l:w;}END{wd=W>0?W:w;h=rshift(NR,1)+(NR%2);for (i=1;i<=h;i++){printf "%*s %s %*s\n",-wd,lines[i],sep,-wd,lines[i+h];}}'
Lorem ipsum dolor sit amet, commodo dignissim justo.
consectetur adipiscing elit. Morbi eu enim leo.
Cras hendrerit scelerisque sollicitudin. Proin pulvinar consectetur elit,
In at mauris cursus, in viverra nisl ultrices quis.
varius eros ut, Vivamus ac lacus eget urna auctor finibus.
dignissim urna. Suspendisse potenti.
Nullam est orci, Vestibulum sed ligula nisl.
molestie sit amet risus in,
$ cat lipsum.txt |awk -v W=50 -v sep='|:|' 'BEGIN{w=0;}{lines[NR]=$0;l=length($0);w=l>w?l:w;}END{wd=W>0?W:w;h=rshift(NR,1)+(NR%2);for (i=1;i<=h;i++){printf "%*s %s %*s\n",-wd,lines[i],sep,-wd,lines[i+h];}}'
Lorem ipsum dolor sit amet, |:| commodo dignissim justo.
consectetur adipiscing elit. |:| Morbi eu enim leo.
Cras hendrerit scelerisque sollicitudin. |:| Proin pulvinar consectetur elit,
In at mauris cursus, |:| in viverra nisl ultrices quis.
varius eros ut, |:| Vivamus ac lacus eget urna auctor finibus.
dignissim urna. |:| Suspendisse potenti.
Nullam est orci, |:| Vestibulum sed ligula nisl.
molestie sit amet risus in, |:|
3条答案
按热度按时间ldioqlga1#
pr
:或者来自stdin:
输出:
参见:
man pr
mrphzbgm2#
如果
command1
生成Run1,command2
生成Run2将把输出连接到列中。
下面是一个使用愚蠢命令的示例
参考:https://sleeplessbeastie.eu/2018/11/19/how-to-display-output-of-multiple-commands-using-columns/
如果你想显示并重定向到一个文件,每个
command
都可以包含一个tee
来完成这个任务。最好包含您自己的命令(或虚拟命令),这样我们就可以给予您一个更具体的答案。
xqkwcwgp3#
虽然
pr
的公认解决方案非常优雅,但它有一个问题,类似于paste
的问题:如果不同行的长度大于8(制表符的默认空格大小),则输出行被替换。线的长度差异越大,输出越混乱。不幸的是,我没有找到比使用一个小的
awk
脚本更健壮的方法,当然可以将其放在一个单独的文件中以供重用。如果你有一个这样的文件(
lipsum.txt
):可接受的解决方案将产生如下结果:
使用下面的(长)一行,您可以在测量长度时将所有行保存在一个数组中,然后再次以两列显示它们,并使用适当的宽度(设置为最大值)。线的长度)。
您甚至可以使用变量
sep
设置字符串分隔符,并使用变量W
设置列的宽度(如果它小于max。行长度,您将获得类似于paste
或pr
的效果,当然):