Bash粘贴命令输出格式

时间:2014-10-20 12:56:57

标签: bash paste

File1中:

1
2

文件2:

1 2 3
4 5

文件3:

x x x
yy yy
zz

paste file1 file2 file2为我提供了一个标签分隔输出:

1       1 2 3   x x x
2       4 5     yy yy
                zz

paste -d" " file1 file2 file3给出了输出结果:

1 1 2 3 x x x
2 4 5 yy yy
  zz

我想要如下:

1 1 2 3 x x x
2 4 5   yy yy
        zz

是否有可能或者我应该尝试其他任何命令?

4 个答案:

答案 0 :(得分:6)

可以使用sed删除标签

 paste file file2 file3 | sed 's/\t/ /'

 1 1 2 3 x x x
 2 4 5   yy yy
         zz

这是一个通用的awk脚本,可以处理任意数量的任何格式的文件。

awk '
    {x=ARGIND;a[x]=a[x]>(b=length($0))?a[x]:b}
    {F[FNR,x]=$0}
    END{
            for(q=1;q<=FNR;q++)
            {
                    for(i=1;i<=ARGC;i++)
                    {
                    printf( "%-"a[i]"s ",F[q,i])
                    }print ""
            }
    }' file{1,2,3,4)

答案 1 :(得分:3)

paste两次告诉我:

$ paste <(paste -d" " f1 f2) f3
1 1 2 3 x x x
2 4 5   yy yy
        zz

答案 2 :(得分:2)

仅仅从你的例子来看,似乎你可以尝试首先加入文件1和2,然后将其与文件3连接,但是使用特殊的分隔符,稍后您将更改为空格。

未经测试的例子:

paste -d" " file1 file2 | paste -d'|' - file3 | sed 's,|, ,g'

我在这里使用了|,但你应该使用你知道的东西肯定不会出现在数据中,比如˘更加模糊。有点黑客,但应该工作。

只有两个文件:

paste -d'¤' file1 file2 | sed 's,¤, ,g'

答案 3 :(得分:1)

这是你要找的东西吗?

$ more file{1,2,3,4} | cat
::::::::::::::
file1
::::::::::::::
1
2
::::::::::::::
file2
::::::::::::::
1 2 3
4 5 6 7 8
::::::::::::::
file3
::::::::::::::
x x x
yy yy
zz
::::::::::::::
file4
::::::::::::::
a a a
bb bb bb
c c cc
d d d
$ paste file{1,2,3,4} | sed -e 's/\t/ \t/g' | column -t -s$'\t'
1   1 2 3       x x x   a a a
2   4 5 6 7 8   yy yy   bb bb bb
                zz      c c cc
                        d d d