カスタムソリューションをローリングしてコマンドラインから行を列に転置する以外に、これを実行できるツールは皮肉にも呼ばれtranspose
ます。
設置
残念ながら、どのリポジトリにもありませんので、ダウンロードしてコンパイルする必要があります。依存する追加のライブラリがないため、これは非常に簡単です。次のように実行できます。
$ gcc transpose.c -o transpose
使用法
簡単なテキストファイルを簡単に処理できます。例えば:
$ cat simple.txt
X column1 column2 column3
row1 0 1 2
row2 3 4 5
row3 6 7 8
row4 9 10 11
このコマンドを使用して転置できます:
$ 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
このコマンドはtranspose
転置(-t
)であり、使用するフィールド区切り文字はスペース(--fsep " "
)です。
あなたの例
サンプルデータはやや複雑な形式であるため、2つのフェーズで処理する必要があります。まず、transpose
処理可能な形式に変換する必要があります。
このコマンドを実行すると、データはより水平に適した形式になります。
$ 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
次に、title1、title2などの2番目のオカレンスを削除するだけです。
$ 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
今でtranspose
は対処できる形式になっています。次のコマンドは、転置全体を実行します。
$ 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