Форматирование вывода команды bash paste
File1:
1
2
File2:
1 2 3
4 5
файл file3:
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 ответов
можно использовать 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())?a[x]:b}
{F[FNR,x]=}
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 и 2, а затем присоединиться к файлу 3, но со специальным разделителем, который вы позже измените на пробел.
непроверенные пример:
paste -d" " file1 file2 | paste -d'|' - file3 | sed 's,|, ,g'
здесь я использовал |
, но вы должны использовать то, что вы точно знаете, не появится в данных, т. е. что-то еще более неясное, как ˘
. Немного взлом, но должно сработать.
всего два файла:
paste -d'¤' file1 file2 | sed 's,¤, ,g'
это то, что вы ищете?
$ 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