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

时间:2015-05-23 07:43:08

标签: linux shell unix sed

我有:

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:

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      

2 个答案:

答案 0 :(得分:1)

当我使用制表符创建输入文件时,我可以重现您的输出。

粘贴也使用列之间的标签,并按照他认为的方式进行操作。
当我更换时,您会看到结果选项卡包含 -




  #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
  




想想你想要的样子。如果需要正确的缩进,则需要为带有较少行的文件添加带有制表符的行。或者操作结果:3个标签分为4行和4个标签,行开头为5个标签。




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

      

答案 1 :(得分:1)

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

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

sed命令用于从file1.txt中删除前导空格。