Você também pode fazer isso com uma única invocação do GNU awk:
reshape.awk
# Set awk to split input at whitespace characters and
# use tab as the output field separator
BEGIN {
RS="[ \t\n]+"
OFS="\t"
}
# Print using OFS or ORS based on the element index
{
printf "%s", $1 (NR%n == 0 ? ORS : OFS)
}
# Append a missing new-line when last row is not full
END {
if( NR%n != 0)
printf "\n"
}
Execute assim:
awk -f reshape.awk n=2 infile
Ou como um verso:
awk -v n=2 'BEGIN { RS="[ \t\n]+"; OFS="\t" } { printf "%s", $1 (NR%n == 0 ? ORS : OFS) } END { if( NR%n != 0) printf "\n" }' infile
Saída:
a aa
aaa b
bb bbb
c cc
ccc d
dd ddd
e ee
eee f
ff fff
g gg
ggg h
hh hhh
i ii
iii j
jj jjj
Ou com n=3
:
a aa aaa
b bb bbb
c cc ccc
d dd ddd
e ee eee
f ff fff
g gg ggg
h hh hhh
i ii iii
j jj jjj