Abgesehen von einer benutzerdefinierten Lösung, mit der Zeilen und Spalten über eine Befehlszeile transponiert werden können, ist das einzige Tool, das ich jemals gesehen habe, ein ironisch genanntes Tool transpose
.
Installation
Leider ist es in keinem Repo, daher müssen Sie es herunterladen und kompilieren. Dies ist ziemlich einfach, da es keine zusätzlichen Bibliotheken gibt, von denen es abhängig ist. Dies kann folgendermaßen erreicht werden:
$ gcc transpose.c -o transpose
Verwendung
Es kann problemlos mit einfachen Textdateien umgehen. Beispielsweise:
$ cat simple.txt
X column1 column2 column3
row1 0 1 2
row2 3 4 5
row3 6 7 8
row4 9 10 11
Kann mit diesem Befehl transponiert werden:
$ transpose -t --fsep " " simple.txt
X row1 row2 row3 row4
column1 0 3 6 9
column2 1 4 7 10
column3 2 5 8 11
Dieser Befehl ist transpose
transponieren ( -t
) und das zu verwendende Feldtrennzeichen ist ein Leerzeichen ( --fsep " "
).
Dein Beispiel
Da Ihre Beispieldaten ein etwas komplexeres Format haben, müssen sie in zwei Phasen bearbeitet werden. Zuerst müssen wir es in ein Format übersetzen, transpose
das damit umgehen kann.
Wenn Sie diesen Befehl ausführen, werden die Daten in einem horizontaleren Format angezeigt:
$ sed 's/:/ /; /^$/d' sample.txt \
| sort | paste - - - - -
title1 A1 title1 B1 title1 C1 title1 D1 title2 A2
title2 B2 title2 C2 title2 D2 title3 A3 title3 B3
title3 C3 title3 D3 title4 A4 title4 B4 title4 C4
title4 D4 title5 A5 title5 B5 title5 C5 title5 D5
Jetzt müssen wir nur die sekundären Vorkommen von title1, title2 usw. entfernen:
$ sed 's/:/ /; /^$/d' sample.txt \
| sort | paste - - - - - | sed 's/\ttitle[0-9] / /g'
title1 A1 B1 C1 D1 A2
title2 B2 C2 D2 A3 B3
title3 C3 D3 A4 B4 C4
title4 D4 A5 B5 C5 D5
Es ist jetzt in einem Format, transpose
das damit umgehen kann. Der folgende Befehl übernimmt die gesamte Umsetzung:
$ sed 's/:/ /; /^$/d' sample.txt \
| sort | paste - - - - - | sed 's/\ttitle[0-9] / /g' \
| transpose -t --fsep " "
title1 title2 title3 title4
A1 B2 C3 D4
B1 C2 D3 A5
C1 D2 A4 B5
D1 A3 B4 C5
A2 B3 C4 D5