Di luar menggulirkan solusi kustom untuk memindahkan baris dengan kolom dari baris perintah satu-satunya alat yang pernah saya lihat yang dapat melakukan ini adalah alat yang disebut ironisnya transpose
.
Instalasi
Sayangnya itu tidak dalam repo apa pun sehingga Anda harus mengunduh dan mengompilasinya. Ini cukup mudah karena tidak memiliki pustaka tambahan yang tergantung padanya. Itu bisa dicapai seperti:
$ gcc transpose.c -o transpose
Pemakaian
Itu dapat menangani file teks langsung dengan mudah. Sebagai contoh:
$ cat simple.txt
X column1 column2 column3
row1 0 1 2
row2 3 4 5
row3 6 7 8
row4 9 10 11
Dapat ditransposisikan menggunakan perintah ini:
$ 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
Perintah ini adalah transpose
untuk mengubah posisi ( -t
) dan pemisah bidang yang digunakan adalah spasi ( --fsep " "
).
Contoh anda
Karena data sampel Anda berada dalam format yang sedikit lebih rumit, maka perlu ditangani dalam 2 fase. Pertama, kita perlu menerjemahkannya ke dalam format yang transpose
dapat menangani.
Menjalankan perintah ini, akan menempatkan data dalam format yang lebih ramah horizontal:
$ 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
Sekarang kita hanya perlu menghapus kejadian sekunder dari title1, title2, dll .:
$ 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
Sekarang dalam format yang transpose
dapat menangani. Perintah berikut akan melakukan seluruh transposisi:
$ 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