Linux 如何使用粘贴(1)排列列?或者如何在shell中创建一个合并行的对齐表?
我希望合并线,以便合并的线在同一边界上对齐。 UNIX paste(1)在所有行都在同一个选项卡边界处相遇时很好地实现了这一点,但在 大小不同(在要合并的行所在的文件中),文本的显示会比较笨拙 具有所需效果的粘贴(1)示例:Linux 如何使用粘贴(1)排列列?或者如何在shell中创建一个合并行的对齐表?,linux,bash,unix,scripting,shell,Linux,Bash,Unix,Scripting,Shell,我希望合并线,以便合并的线在同一边界上对齐。 UNIX paste(1)在所有行都在同一个选项卡边界处相遇时很好地实现了这一点,但在 大小不同(在要合并的行所在的文件中),文本的显示会比较笨拙 具有所需效果的粘贴(1)示例: $ echo -e "a\nb\nccc\nd" | paste - - a b ccc d $ echo -e "a\nb\ncccccccccccc\nd" | paste - - a b cccccccccccc d 具有不期
$ echo -e "a\nb\nccc\nd" | paste - -
a b
ccc d
$ echo -e "a\nb\ncccccccccccc\nd" | paste - -
a b
cccccccccccc d
具有不期望效果的粘贴(1)示例:
$ echo -e "a\nb\nccc\nd" | paste - -
a b
ccc d
$ echo -e "a\nb\ncccccccccccc\nd" | paste - -
a b
cccccccccccc d
请注意,第二列没有对齐。我希望“b”与“d”对齐,这需要一个额外的选项卡。不幸的是,我认为这是粘贴实用程序的限制,因此,如果有人知道如何获得上述所需的效果,我很乐意听听。您可以使用与相同的格式说明符创建格式化输出。使用格式说明符,可以指定最小字段宽度。例如:
printf "%30s%30s\n" "Alpha" "Bravo"
pr -m -t -w 200 file1 file2
查看列实用程序
$ echo -e "a\nb\ncccccccccccc\nd" | paste - - | column -t
a b
cccccccccccc d
如果行中可能已经使用pr
命令包含空格或其他字符,请参阅答案,了解处理此问题的简单方法。例如:
printf "%30s%30s\n" "Alpha" "Bravo"
pr -m -t -w 200 file1 file2
尝试使用将数据打印到固定宽度字段中,然后再将其传递到粘贴
(确保该字段与最长值一样长)