Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用粘贴(1)排列列?或者如何在shell中创建一个合并行的对齐表?_Linux_Bash_Unix_Scripting_Shell - Fatal编程技术网

Linux 如何使用粘贴(1)排列列?或者如何在shell中创建一个合并行的对齐表?

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 具有不期

我希望合并线,以便合并的线在同一边界上对齐。 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
具有不期望效果的粘贴(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
尝试使用将数据打印到固定宽度字段中,然后再将其传递到
粘贴
(确保该字段与最长值一样长)