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
是否有可能或者我应该尝试其他任何命令?
答案 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