Linux 如何对不同长度的列使用“粘贴”命令

Linux 如何对不同长度的列使用“粘贴”命令,linux,shell,unix,sed,Linux,Shell,Unix,Sed,我有: 我想在ofile.txt中粘贴所有这三列 我试过了 file1.txt file2.txt file3.txt 8 2 2 1 2 1 8 1 0 3 3 5

我有:

我想在ofile.txt中粘贴所有这三列

我试过了

file1.txt       file2.txt      file3.txt
   8               2               2
   1               2               1
   8               1               0
                   3               3
                   5               3
                   3
                   4               
我在ofile.txt中得到的结果:

paste file1.txt file2.txt file3.txt > ofile.txt
哪个应该来

ofile.txt:
   8               2               2
   1               2               1
   8               1               0
          3               3
          5               3
          3
          4       

当我使用制表符创建输入文件时,我可以复制您的输出。
“粘贴”也在列之间使用制表符,并按他认为应该的方式执行。 当我用
-
替换选项卡时,您会看到结果:

ofile.txt
   8   2   2
   1   2   1
   8   1   0
       3   3
       5   3
       3
       4      
想想你想要什么。如果需要正确的缩进,则需要为行数较少的文件添加带有tab的行。或者操纵结果:将3个选项卡分为4个,并将行开头的4个选项卡分为5个选项卡

    # more x* | tr '\t' '-'
    ::::::::::::::
    x1
    ::::::::::::::
    -1a
    -1b
    -1c
    -1d
    ::::::::::::::
    x2
    ::::::::::::::
    -2a
    -2b
    ::::::::::::::
    x3
    ::::::::::::::
    -3a
    -3b
    -3c
    -3d
    -3e
    -3f
    -3g
   # paste x? | tr '\t' '-'
    -1a--2a--3a
    -1b--2b--3b
    -1c---3c
    -1d---3d
    ---3e
    ---3f
    ---3g

您可以在
bash
中使用进程替换尝试此
paste
命令:

sed -e 's/\t\t\t/\t\t\t\t/' -e 's/^\t\t\t\t/\t\t\t\t\t/'

paste
paste file1.txt file2.txt file3.txt
提供所需的输出。显示
cat-vte
file1.txt file2.txt file3.txt`以查看输入文件中是否有任何控制字符。
paste <(sed 's/^[[:blank:]]*//' file1.txt) file2.txt file3.txt
8       2       2
1       2       1
8       8       0
        3       3
        5       3
        3
        4