Транспонировать матрицу, используя СЭД


Я пытаюсь перенести следующие данные:

1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

к:

1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9 9
10 10 10 10 10 10 10 10 10 10

используя СЭД только пожалуйста.

У меня есть рабочее решение, но я уверен, что он может быть улучшен:

sed -rn 'H;${x;s/\n/ &/g;s/$/@/;:a;s/\n([^ ]+ ?)(.*@.*)/%\2\1/;ta;s/ %+@//p;t;s/ *$/\n/;y/%/\n/;ta}'

Он использует % и @ для перевода строки и конца строки разделители, которые могут быть проблематичными.



607
4
задан 14 ноября 2011 в 01:11 Источник Поделиться
Комментарии
1 ответ

Это еще один способ сделать это:

sed -r '1{s/$/ /;s/ / \n/g};:a;$!N;s/$/ /;:b;s/\n(.*\n+)(\S+\s)/\2@!@\1/;tb;s/@!@/\n/g;${s/ \n/\n/g;s/\n+$//;q};ba'

Этот способ несколько быстрее и использует только один разделитель, которые могут быть обработаны, чтобы быть уникальным. т. е. @!@ в этом примере

2
ответ дан 24 ноября 2011 в 12:11 Источник Поделиться