并排显示两个文件

新手上路,请多包涵

如何在 shell 中并排显示 2 个不同长度的未排序文本文件 (按列)

给定 one.txttwo.txt

 $ cat one.txt
apple
pear
longer line than the last two
last line

$ cat two.txt
The quick brown fox..
foo
bar
linux

skipped a line

展示:

 apple                               The quick brown fox..
pear                                foo
longer line than the last two       bar
last line                           linux

                                    skipped a line

paste one.txt two.txt 几乎可以解决问题,但不能很好地对齐列,因为它只是在第 1 列和第 2 列之间打印一个选项卡。 我知道如何使用 emacs 和 vim 进行此操作,但希望将输出显示到标准输出以进行管道等.

我想出的解决方案使用 sdiff 然后管道到 sed 以删除输出 sdiff 添加。

sdiff one.txt two.txt | sed -r 's/[<>|]//;s/(\t){3}//'

我可以创建一个函数并将其粘贴到我的 .bashrc 但肯定已经存在用于此的命令(或者可能是 更清洁 的解决方案)?

原文由 Chris Seymour 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您可以使用 pr 来执行此操作,使用 -m 标志来合并文件,每列一个,并 -t 来省略标题,例如。

 pr -m -t one.txt two.txt

输出:

 apple                               The quick brown fox..
pear                                foo
longer line than the last two       bar
last line                           linux

                                    skipped a line

也可以看看:

原文由 Hasturkun 发布,翻译遵循 CC BY-SA 4.0 许可协议

要扩展 @Hasturkun 的答案:默认情况下 pr 仅使用 72 列作为其输出,但使用终端窗口的所有可用列相对容易:

 pr -w $COLUMNS -m -t one.txt two.txt

大多数 shell 会在 $COLUMNS shell 变量中存储 (和更新) 终端的屏幕宽度,所以我们只是将该值传递给 pr 以用于其输出的宽度设置。

这也回答 了@Matt 的问题:

pr 有没有办法自动检测屏幕宽度?

所以,不: pr 本身无法检测到屏幕宽度,但我们通过它的 -w 选项传递终端的宽度来帮助它。

请注意, $COLUMNS 是一个 shell 变量,而不是环境变量,因此它不会导出到子进程,因此上述方法可能不适用于脚本,只能在交互式 TTY 中使用……请参阅 LINES和 COLUMNS 环境变量在替代方法的脚本中丢失

原文由 pvandenberk 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题