У меня огромный разделенный табуляцией файл, отформатированный так:
X column1 column2 column3
row1 0 1 2
row2 3 4 5
row3 6 7 8
row4 9 10 11
Я хотел бы транспонировать эффективным способом, используя только команды bash (для этого я мог бы написать Perl-скрипт длиной около десяти строк, но он должен выполняться медленнее, чем встроенные функции bash). ). Таким образом, вывод должен выглядеть как
X row1 row2 row3 row4
column1 0 3 6 9
column2 1 4 7 10
column3 2 5 8 11
Я думал о таком решении
cols=`head -n 1 input | wc -w`
for (( i=1; i <= $cols; i++))
do cut -f $i input | tr $'\n' $'\t' | sed -e "s/\t$/\n/g" >> output
done
Но это медленно и не кажется самым эффективным решением. Я видел решение для vi в этом посте , но оно все еще слишком медленное. Есть мысли / предложения / блестящие идеи? : -)